【问题标题】:Sort comments by likes and dislikes按喜欢和不喜欢对评论进行排序
【发布时间】:2018-04-29 03:46:45
【问题描述】:

求助,请改正查询,我需要按照喜欢和不喜欢对cmets进行排序(即按喜欢和不喜欢的总和:cnt_total = cnt_like + cnt_dislike,上面显示谁的cnt_total多),如果cnt_total相等 - 按日期排序。 cnt_total 只是一个例子,它不在表格中。

具有以下列的表 cmets:id_comment、id_user、id_news、comment、id_parent、date_time、cnt_like、cnt_dislike、is_active。

SELECT u.login, c.* 
FROM comments c
LEFT JOIN users u ON u.id = c.id_user
WHERE id_news = '{$id_news}' AND c.is_active = 1 
ORDER BY id_parent, date_time DESC

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试这个:

    SELECT u.login, c.*, c.cnt_like + c.cnt_dislike AS cnt_total 
    FROM comments c
    LEFT JOIN users u ON u.id = c.id_user
    WHERE id_news = '{$id_news}' AND c.is_active = 1 
    ORDER BY cnt_total DESC, date_time DESC
    

    【讨论】:

    • c.cnt_like - c.cnt_like(c.cnt_like 是正数 UNSIGNED,c.cnt_dislike 是正数 UNSIGNED)
    • 未捕获的异常:BIGINT UNSIGNED 值超出 '(c.cnt_like - c.cnt_dislike) 中的范围
    • 不确定我是否了解您的 cmets?它工作正常吗?我放了 cnt_like+cnt_dislike 是因为这就是你的问题,但显然很容易改成 -。
    • 我删除了 cnt_like 和 cnt_dislike 列中的 UNSIGNED 值,因为 UNSIGNED 不起作用。然后 - 是的,它工作正常!!!
    • 很高兴听到。如果您想将列保留为 UNSIGNED,您可以使用 CAST(c.cnt_like AS SIGNED)-CAST(c.cnt_dislike AS SIGNED) AS cnt_total
    猜你喜欢
    • 2012-01-22
    • 2013-05-26
    • 2016-03-24
    • 1970-01-01
    • 2016-03-10
    • 2016-11-09
    • 2013-11-05
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多