【问题标题】:Mysql GROUP BY in LEFT JOIN and ORDER BYMysql GROUP BY 在 LEFT JOIN 和 ORDER BY
【发布时间】:2013-07-30 16:09:56
【问题描述】:

我的这个查询很好用

    $query = "SELECT 
        beva_post.*, 
        CONVERT_TZ(beva_post.date_published, '-00:00', '+00:00') as moment, 
        beva_rubrique.titre_en, 
        beva_user.image_user   
        FROM beva_post 
        LEFT JOIN beva_user 
            ON beva_user.id_user = beva_post.id_user 
        LEFT JOIN beva_rubrique 
            ON beva_rubrique.id_rubrique = beva_post.id_rubrique 
        LEFT JOIN beva_post_like 
            ON beva_post_like.id_post = beva_post.id_post 
        WHERE beva_post.id_user != '' 
        AND beva_post.flag = 'true' ";
$query .= "ORDER BY beva_post.id_post DESC ";
$query .= "LIMIT 50";

但我想排序这个查询不是通过 id_post DESC 而是通过 id_post 在表 beva_post_like 中最喜欢的 id_user (DESC)

beva_post_like 表如下所示:

    +-------------+--------------+
    | id_post     | id_user      |
    +-------------+--------------+
    | 1           | 20           |
    | 1           | 11           |
    | 1           | 10           |
    | 2           | 20           |
    | 2           | 50           |
    | 1           | 15           |
    +-------------+--------------+

我尝试在 LEFT JOIN beva_post_like 中使用 GROUP BY,但它不起作用!

我必须使用更多查询吗?

感谢您的帮助...

克里斯

在你回答之后,我这样做了,但我仍然有一些帖子最后带有“喜欢”

    $query = "SELECT 
        beva_post.*, 
        COUNT(beva_post.id_post) as cpt, 
        CONVERT_TZ(beva_post.date_published, '-00:00', '+00:00') as moment, 
        beva_rubrique.titre_en, 
        beva_user.image_user  
        FROM beva_post 
        LEFT JOIN beva_user 
            ON beva_user.id_user = beva_post.id_user 
        LEFT JOIN beva_rubrique 
            ON beva_rubrique.id_rubrique = beva_post.id_rubrique 
        LEFT JOIN beva_post_like 
            ON beva_post_like.id_post = beva_post.id_post 
        WHERE beva_post.id_user != '' 
        AND beva_post.flag = 'true' ";
$query .= "GROUP BY beva_post.id_post ";
$query .= "ORDER BY cpt DESC ";
$query .= "LIMIT 50";

【问题讨论】:

    标签: mysql group-by sql-order-by left-join


    【解决方案1】:

    您希望帖子按喜欢它的用户数排序? 如果是这种情况,您可以GROUP BY id_post,在SELECT 中添加COUNT(id_user),并在此COUNT(id_user) 中添加 ORDER BY DESC。

    如果我误解了您的问题,您能否更准确地说明您的 ORDER BY 目标?

    【讨论】:

    • 我需要为用户点赞最多的人发帖。没有赞的帖子也必须显示,但在最后。
    • 为什么不起作用? GROUP BY 没有返回任何结果?你能用你的新查询编辑第一篇文章吗?
    • 我在上面发布了我的查询 ;))
    • 将此添加到您的 SELECT:COUNT(beva_post_like.id_user) AS 'NB_LIKES'ORDER BY NB_LIKES DESC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2016-04-11
    相关资源
    最近更新 更多