【问题标题】:Ordering rows by count in a separate pivot table在单独的数据透视表中按计数对行进行排序
【发布时间】:2015-09-01 03:46:32
【问题描述】:

我有一个主表:图片和投票。

投票包含 2 个字段:Id、image_id

我想要做的是查询图像表并返回它们按投票表中的票数排序。

目前:

$stmt = $conn->prepare(
    'SELECT *
    FROM images
    LIMIT 10'
);

我了解基本的左连接,但想不出如何按票数排序。只需要一个开始的例子。

谢谢

【问题讨论】:

  • 哪个字段包含输入的投票?还是列表中的每一行都代表一票?

标签: php mysql join


【解决方案1】:

假设 VOTES 表中的每一行都意味着对图像投一票,这应该有效:SQL DEMO

SELECT *, COUNT(v.image_id)
FROM images AS i
LEFT JOIN votes AS v ON i.id=v.image_id 
GROUP BY i.id
ORDER BY v.image_id desc

【讨论】:

    【解决方案2】:
    drop table if exists t1;
    create table t1 (id int);
    insert into t1 values (1), (2), (3);
    drop table if exists t2;
    create table t2 (id int, img_id int);
    insert into t2 values (1, 1), (2, 1), (3, 2), (4,1), (5,3), (6,2);
    
    select * 
      from t1 
        left join 
          (select img_id, count(*) count 
               from t2 
             group by img_id) c 
        on img_id=t1.id 
      order by count
    

    Demo on sqlfiddle

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多