我正在尝试选择符合客户偏好的产品(即他们喜欢的颜色),但是当子查询中评估的值是数组时,我无法创建IN语句。
为了简化问题,我只包括几个字段,但每个客户有几百个字段,其中大约一半是数组,并且有apx。每种产品的字段数相同。
如果选择了多种颜色,则此查询无效:
$result = mysql_query("SELECT * FROM products WHERE color IN
(SELECT colors_love FROM style WHERE style.user_id=$user_id)")
我也试过像这样爆炸数组:
while ($row = mysql_fetch_array($result)) {
$colors_love = explode(',', $row['colors_love']);
echo $row['product_name']. ", ". $row['style']. ",". $row['color']. ", ". $row['price'];
}
由于这产生了相同的结果,我假设这不是问题,或者它需要在查询中使用之前爆炸 - 我不太确定该怎么做。
答案 0 :(得分:0)
使用EXISTS进行如下操作:
SELECT * FROM products WHERE EXISTS
(SELECT 1 FROM style
WHERE FIND_IN_SET(products.color,style.colors_love)>0 and style.user_id=$user_id)
答案 1 :(得分:0)
总是性能更好&在可能的情况下练习使用直接连接而不是IN或EXISTS或FIND_IN_SET之类的功能。以下查询在不使用IN或EXISTS或其他函数的情况下实现了您的目标:
SELECT
products.*
FROM
products
INNER JOIN
(SELECT style.colors_love
FROM style
WHERE style.user_id = $user_id) AS fave_colors ON
fave_colors.colors_love = products.color
答案 2 :(得分:-1)
听起来您正在尝试向客户展示客户已经说过/喜欢的颜色的产品列表(colors_love)。
这是伪代码,但是这个结构可能会得到你想要的,而不用担心爆炸你的数组:
select
customers.cust_id, customers.fav_color, products.id, products.name
from
customers
inner join products
on customers.fav_color = products.color