繁体   English   中英

PHP,Mysql根据来自另一个表的记录数对结果进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM