2016-09-28 4 views
0

インデックス内に存在する行を検索しようとしていますが、インデックスに一致する行があっても結果がnullのままになります。私のクエリのロジックに何か問題はありますか?ここでインデックスの値がすべて存在する必要があるMySQLクエリの行を検索

は私のテストクエリです:

SELECT * 
FROM `producthashtags_index` 
WHERE `the_product_id` =54433 

結果::

id  producthashtag_id the_product_id 
25433 6     54433 
25434 41     54433 
25435 42     54433 

次に、あなたがあなたがthe_product_id 54433は、クエリを使用してインデックステーブルproducthashtags_index内に存在する見ることができます。ここ

SELECT `the_products` . * 
FROM `the_products` 
INNER JOIN `producttypes_index` ON `producttypes_index`.`the_product_id` = `the_products`.`id` 
AND `producttypes_index`.`type_id` = '1' 
INNER JOIN `producthashtags_index` ON `producthashtags_index`.`the_product_id` = `the_products`.`id` 
WHERE 
`producthashtags_index`.`producthashtag_id` 
IN ('41') 
AND 
`producthashtags_index`.`producthashtag_id` 
IN ('42') 
AND 
`producthashtags_index`.`producthashtag_id` 
IN ('6') 
ORDER BY updated_at DESC 

それはまた、インデックステーブル内に存在することがわかりますproducttypes_indexクエリを歌う:

SELECT * 
FROM `producttypes_index` 
WHERE `the_product_id` =54433 

結果:

type_id   the_product_id 
1    54433 
+0

なぜあなたは3つの 'AND IN(...)'を持っていますか、 'IN( '42'、 '41'、 '6') 'を1つのステートメントで使用しますか?また、これを再作成できるようにスキーマを提供できますか? –

+0

インデックスのすべての行が存在するように '42' AND '41' AND '6' '42' OR '41' OR '6'が必要です。 –

+0

解決策が参照された重複した質問よりも複雑であるため、なぜ質問が重複とマークされたのか分かりません。 –

答えて

0

AND `producttypes_index`.`type_id` = '1' 

を削除するあなたも、このようなものの中に3 IN`sを作ることによって、あなたのコードをoptimazeことができます。

AND `producthashtags_index`.`producthashtag_id` IN('42','41','6') 
+0

type_idを1にする必要があります。その部分を削除できません。私はあなたが2番目の部分について正しいと信じています。しかし、それらを区切るコンマは、42 OR 41 OR 6を検出しないでしょうか? 3つすべてがインデックスに存在する必要があります。 –

+0

はい、それが_OR_を使用しないようにしたい場合は、_IN_を使用しないでください。普通の古い等号を使用してください。_ = _ _producttypes_index.the_product_id = 51025_がproducthashtags_index_の_the_product_idのいずれかと一致していますか? そうでない場合、_JOIN_は空になるためです。 –

関連する問題