你好!有一个显示所有产品的查询:
SELECT p.product_id,
(SELECT AVG(rating) AS total
FROM oc_review r1
WHERE r1.product_id = p.product_id AND r1.status = '1'
GROUP BY r1.product_id) AS rating,
(SELECT price
FROM oc_product_discount pd2
WHERE pd2.product_id = p.product_id
AND pd2.customer_group_id = '1'
AND pd2.quantity = '1'
AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW())
AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW()))
ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount,
(SELECT price
FROM oc_product_special ps
WHERE ps.product_id = p.product_id
AND ps.customer_group_id = '1'
AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW())
AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))
ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON (p2c.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE pd.language_id = '1'
AND p.status = '1'
AND p.date_available <= NOW()
AND p2s.store_id = '0'
AND p2c.category_id = '76'
GROUP BY p.product_id
ORDER BY rating ASC, LCASE(pd.name) ASC
LIMIT 0,15
我需要先显示所有具有 的产品,position=1
然后再显示所有其他产品。我试图在最后添加ORDER BY position='1' DESC
,给出了一个错误。PS 请告诉我,我在哪里犯了错误(在 mysql 中,不幸的是,我理解马马虎虎)
首先按评分字段排序。然后,如果 rating 字段中有单行,则按 pd.name 字段排序。只有这样,如果两个字段中同时存在相同的行,则按值 position='1' 对其进行排序
如果您对 MARTIN GRUBER 的“理解 SQL”一书感兴趣,您将找到所需的一切