0

さて、データを抽出する必要がある 3 つの mysql テーブルがあります。結合に関係するものはすべて、本当に私を行き詰まらせます!

表 1 = 製品 (productid、名前)

表 2 = カテゴリ (カテゴリ ID、名前)

表 3 = categoryproduct (categoryid, productid) - 私の結合テーブル

これらの製品と同じカテゴリに分類される製品をランダムに選択するために必要な製品 ID の配列があります。

アイデアは、クエリの結果として、顧客が好む可能性のある類似/関連製品のセクションがカートに表示されるということです

だから何か

SELECT name etc FROM table1
WHERE table2.categoryid of results of the query = table3.categoryid of current products
ORDER BY RAND()
LIMIT 3

どうやってそれを書くのですか??

4

2 に答える 2

1

PHP を使用していると仮定すると、次のメソッドはデータベースから 10 個の関連製品を取得します。

$productids = array(1002,789,999,203,321);

$sql = '
    SELECT * FROM 
    products p JOIN categoryproduct pc
        ON p.productid = pc.productid
    WHERE pc.categoryid IN(
        SELECT DISTINCT(categoryid) FROM 
        products inner_p JOIN categoryproduct inner_pc
            ON inner_p.productid = inner_pc.productid
        WHERE inner_p.productid IN('.implode(',',$productids).')
    )
    ORDER BY RAND()
    LIMIT 10';
于 2013-04-08T06:32:44.713 に答える
0

あなたの問題を正しく理解していれば、このクエリが役立つかもしれません。ここでは、サブクエリの代わりに、ユーザーが選択したさまざまな製品のカテゴリ ID を含むカンマ区切りの文字列を指定できます。

    select p.name
    from products p,categoryproduct cp
    where p.productid=cp.productid
    and cp.categorid in(
    select categoryid 
    from cartitems)
    order by RAND()
于 2013-04-08T04:02:53.100 に答える