php - SQL:特定项目的用户禁止列表

标签 php mysql sql

我有一个产品表:

ID, Name, Time, Creator, Owner, Size, Color, ...

我想禁止某些用户使用某些产品。我想到了 2 个解决方案。

1) 我创建一个表,其中包含有关被禁止用户的信息:

Product ID, User ID, BannedOrNot

2) 在产品表中为每个用户添加一列。

ID, Name, Time, Creator, Owner, Size, Color, ..., User 1, User 2, User 3

我在此处添加用户是否被禁止使用该产品。

我知道第一个解决方案更好。但我每秒都要处理大量的查询。因此,出于性能考虑,我想避免许多查询。

用户未选择特定产品。该脚本确实根据尺寸、颜色等自动选择产品。但问题是它不知道用户是否被禁止使用该产品。

第一个解决方案需要首先从属于访问产品表的用户的禁止列表中获取所有数据。然后根据用户是否被禁止从产品表中选择条目。

如果重要的话,我正在使用 PHP、MySQL。

最佳答案

我更喜欢第一个解决方案。仅在表中为每个被禁止的用户添加一行,并将其添加到您的产品查询中

在 FROM 子句中

LEFT JOIN banned_table ON (products.id = banned_table.producs_id 
                           AND banned_table.user_id = <current_user_id>) 

在 WHERE 子句中

... AND banned_table.id IS NULL 

这仅检索banned_table(如果存在)的一行,并避免查询结果包含被禁止的产品。

希望它适合您。

关于php - SQL:特定项目的用户禁止列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24032602/

相关文章:

php - 如何在 SwiftMailer 中关闭 Smtp 连接

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - 使用 laravel 进行异步评分(喜欢/不喜欢)

python - 使用 GQL 向现有表添加一列?

php - Paypal IPN,但来自谁(如果注册和 paypal 邮件不同)

php - 如何在 PHP 中通过 AJAX 更新两个 MySQL 表?

mysql - 从数据库导入表

mysql - 尝试添加多个外键时,sql 中出现错误

sql - 查询以根据其 ID 获取表名

sql - 如何让 SSMS 为 SQL Azure 提供自动完成功能?