在IN
语句中使用SELECT
运算符时,subquery
中包含逗号分隔列表(在其中一个或两个中)的db列名称使用的正确语法是什么列)?
在下面的代码段中,我试图找出客户首选颜色中可用的产品(任一列中都可以有一个或多个值)
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')
我已经尝试了所有我能想到的东西,包括将它声明为array
并尝试连接这些值,并且由于我的编码有点生疏,我感觉我的语法略有偏差。
答案 0 :(得分: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
但是如果这样做的话,我仍然想为每种不同的数据类型创建不同的表 - 所以,在最小值,一个数字类型属性表和一个字符串类型属性表。