2017-11-20 8 views
0

複数の検索値を持つitemsテーブルと値テーブルを結合する基準に基づいてレコードを取得する助けが必要です。Mysqlは異なる(リレーショナル)テーブル(manyToMany)に複数の値を持つレコードを取得します

アイテムテーブル

+----+-----------+ 
| id | title | 
+----+-----------+ 
| 82 | Test ITEM | 
+----+-----------+ 

テーブル

+----+--------------+ 
| id | Attribute | 
+----+--------------+ 
| 1 | An Attribute | 
+----+--------------+ 

アイテム属性は、テーブル私は何

+----+---------+--------------+-----------+ 
| id | item_id | attribute_id | option_id | 
+----+---------+--------------+-----------+ 
| 1 |  82 |   1 |  25 | 
| 1 |  82 |   1 |   3 | 
+----+---------+--------------+-----------+ 

値属性:

SELECT 
p.* 
FROM 
product_products p 
LEFT JOIN 
product_attribute_values v ON v.product_id = p.id 
LEFT JOIN 
product_attribute_options o ON o.id = v.option_id 
WHERE 
(p.id = 82 OR p.parent_id = 82) AND 
(o.id IN (25, 3)) 
GROUP BY p.id 

しかし、3つのOR 25値を持つすべてのアイテムが返されるため、このクエリに問題があります。

同時に25と3の値を持つアイテムだけを返したいと思います。 Advanced Mysql Query to get master record if two conditions matches on different rows of child records

同じ結果:

はこれをしようとしました。

助けてください。

答えて

2

SELECT p.id,p.title 
FROM product_products p 
LEFT JOIN product_attribute_values v ON v.product_id = p.id 
LEFT JOIN product_attribute_options o ON o.id = v.option_id 
WHERE (p.id = 82 OR p.parent_id = 82) 
    AND (o.id IN (25, 3)) 
GROUP BY p.id,p.title 
HAVING COUNT(DISTINCT o.id) = 2 

このクエリを試してみてくださいそれは今働いているoption_id

SELECT p.*,o.id 
FROM 
    (
    SELECT p.id,p.title 
    FROM product_products p 
    JOIN product_attribute_values v ON v.product_id = p.id 
    JOIN product_attribute_options o ON o.id = v.option_id AND o.id IN (25, 3) 
    WHERE (p.id = 82 OR p.parent_id = 82) 
    GROUP BY p.id,p.title 
    HAVING COUNT(DISTINCT o.id) = 2 
) p 
JOIN product_attribute_values v ON v.product_id = p.id 
JOIN product_attribute_options o ON o.id = v.option_id AND o.id IN (25, 3) 
+0

を追加します。私は2つ以上の値でこのクエリを試してみます。私は最終的な条件として持っていることを使用して考えることができませんでした:)良い仕事! –

+0

答えを更新しました。 2番目の変種を試してください。 – Leran2002

関連する問題