2

お客様の好み(好きな色)に合う商品を選びたいのですが、サブクエリで評価する値が配列の場合に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'];
}

それは同じ結果をもたらしたので、それが問題ではないか、クエリで使用する前に分解する必要があると思います-どうすればよいかわかりません.

4

3 に答える 3

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
于 2013-02-19T04:03:53.617 に答える
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)
于 2012-12-29T00:28:38.510 に答える
-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
于 2012-12-29T00:29:08.113 に答える