Php,Mysql根据另一个表中的记录数排序结果

时间:2015-08-19 20:33:56

标签: php mysql

我正在加入两张桌子来展示汽车品牌。结构如下:

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;",它会正确显示所有记录。

我想根据每个品牌类别下的车辆数量对结果进行排序。因此,例如,如果宝马类别列出的汽车数量最多,那么它应该是第一个。

2 个答案:

答案 0 :(得分:0)

您可以在聚合查询中加入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;

{{1}}

答案 1 :(得分:0)

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;

您关注的是库存中的汽车数量。你想要根据每个品牌的数量来分解它们。因此,您主要关注项目表,只需要品牌表来获取存储在项目表(品牌名称)中的信息。最后,为了汇总每个品牌的数量,你必须让MySQL知道你想要的GROUP BY

我还没有使用过EXPLAIN,但我认为底层查询效率更高。