mysql - 具有逗号分隔列表的数据库列的语法 - mySQL `IN` 运算符

标签 mysql arrays subquery in-operator

SELECT 语句中使用 IN 运算符时,子查询 中的数据库列名称的正确语法是什么?包含逗号分隔的列表(在任一列或两列中)?

在下面的代码片段中,我尝试识别客户喜欢的颜色的产品(任一列中可以有一个或多个值)

SELECT * FROM products WHERE products.Colors IN (SELECT style.colors_love FROM style WHERE user_id = $user_id)

此格式适用于硬编码列表:

$colors_love = "'Black','Royal_Blue','Dodger_Blue','Red'";
SELECT * FROM products WHERE products.Color IN ('$colors_love') 

我已经尝试了我能想到的一切,包括将其声明为数组并尝试连接这些值,并且由于我的编码有点生疏,我感觉我的语法只是稍微有点离开。

最佳答案

SELECT p.* 
  FROM products p
  JOIN customers c 
    ON c.Colors_Prefer = p.colors 
 WHERE c.user_id = $user_id;

如果我们考虑首选颜色的示例,标准化方法可能如下所示:

user preferred_colour 
bob  red
bob  yellow
mike red
mike green
dave turquoise

如果您想以这种方式存储数百个属性,那么 EAV 方法可能适合:

user attribute value
bob  colour    red
bob  colour    yellow
mike colour    red
mike colour    green
dave colour    turquoise
dave vehicle   bicycle
dave vehicle   car
bob  vehicle   train

但如果这样做,我仍然会想为每种不同的数据类型创建不同的表 - 因此,至少需要一个用于数字类型属性的表和一个用于字符串类型属性的表。

关于mysql - 具有逗号分隔列表的数据库列的语法 - mySQL `IN` 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828818/

相关文章:

mysql - 更新 MySQL View 中的值

javascript - 将对象添加到 parse.com 查询中的数组

php - PDO => 'PDOException' 消息为 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined'

ruby-on-rails - 您如何获得 Active Record 中子查询的计数?

MySql存储过程,如何用CONCAT插入多个变量

mysql - 在mysql中显示查询结果中的全文

mysql - 将数据从 MySQL 迁移到 BigQuery 的最佳实践

javascript - 获取数据到表行和表列

c - 包含 'double' 数组的结构中的 Scanf 不起作用?

mysql - 延迟评估 MySQL View