2

在语句中使用IN运算符时,当它们包含逗号分隔列表(在任一列或两列中)时,SELECT用于 db 列名的正确语法是什么?subquery

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

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') 

我已经尝试了所有我能想到的方法,包括将其声明为 anarray并尝试连接这些值,并且由于我的编码有点生疏,我觉得我的语法有点不对劲。

4

1 回答 1

2
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

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

于 2014-09-14T00:30:20.417 回答