0

私が使用しているMysqlバージョンでは、サブクエリ内でLIMITを使用できないため、クエリを高速化できます。次のクエリで代わりに結合を使用するには?

SELECT p . * , (

SELECT AVG( review_rating ) AS rating_total
FROM reviews r
WHERE r.review_item_ref = p.pattern_ref
AND r.review_state =1
GROUP BY r.review_item_ref
) AS review_rating
FROM patterns p
WHERE pattern_active >=0
AND p.pattern_family =27
AND p.pattern_ref
IN (

SELECT item_pattern_ref
FROM items
WHERE item_pattern_ref = p.pattern_ref LIMIT 1
)
GROUP BY p.pattern_id
ORDER BY p.pattern_description ASC , LCASE( p.pattern_description ) ASC
LIMIT 0 , 16
4

2 に答える 2

0

p.pattern_ref のアイテムが一致することを検証しようとしているようですが、正しいですか?

もしそうなら、

SELECT 
    p . *,
    (SELECT AVG( review_rating ) AS rating_total
        FROM reviews r
        WHERE r.review_item_ref = p.pattern_ref
            AND r.review_state =1
        GROUP BY r.review_item_ref
    ) AS review_rating
FROM patterns p
INNER JOIN items i ON p.pattern_ref = i.item_pattern_ref
WHERE p.pattern_active >= 0
    AND p.pattern_family = 27
GROUP BY p.pattern_id
ORDER BY p.pattern_description ASC , LCASE( p.pattern_description ) ASC
LIMIT 0 , 16

動作するはずです。INNER JOIN は、両側が一致する行のみを返します。

于 2013-02-10T04:28:09.670 に答える
0

サブクエリで LIMIT を使用することはできません。

于 2013-02-10T18:32:05.507 に答える