[英]Php, Mysql sort results based on number of records from another table
我要加入两个表来展示汽车品牌。 结构如下:
SELECT DISTINCT
b.title
FROM
brands as b
INNER JOIN items as i
ON i.brand_id = b.id
WHERE i.status = 1
ORDER BY COUNT(i.brand_id) DESC;
上面仅产生一个记录。 如果我删除"ORDER BY COUNT(i.brand_id) DESC;"
它会正确显示所有记录。
我想根据每个品牌类别下的车辆数量对结果进行排序。 因此,例如,如果bmw类别下列出的最多汽车,则它应该是第一个。
您可以在汇总查询中加入brands
:
SELECT b.title
FROM brands b
INNER JOIN (SELECT brand_id, COUNT(*) AS cnt
FROM items
WHERE status = 1
GROUP BY brand_id) i ON i.brand_id = b.id
ORDER BY cnt DESC;
SELECT b.title FROM brands as b INNER JOIN items as i ON i.brand_id = b.id WHERE i.status = 1 GROUP BY b.title ORDER BY COUNT(i.brand_id) DESC;
这应该为您工作。
我会用
SELECT b.title, count(i.brand_id) FROM items i LEFT JOIN brands as b ON b.id = i.brand_id WHERE i.status = 1 GROUP BY i.brand_id ORDER BY COUNT(i.brand_id) DESC;
您关心的是库存的汽车数量。 您想按每个品牌的数量细分它们。 因此,您主要关心的是item表,而只需要brands表来获取存储在items表(brand name)中的信息。 最后,为了获得每个品牌的总数,您必须让MySQL知道您想要的GROUP BY
。
我没有使用EXPLAIN,但我认为最底层的查询效率更高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.