2013-07-30 150 views
0

我有这个疑问,工作正常Mysql的GROUP BY在LEFT JOIN和ORDER BY

$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具有由id_user最喜欢(DESC )表beva_post_like

的beva_post_like表看起来像这样:

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

我GROUP BY试图在LEFT JOIN beva_post_like,但它不工作!

我必须使用更多的查询吗?

感谢您的帮助......

克里斯

你的答案后,我这样做,但我仍然有一些职位与“喜欢”末

$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"; 

回答

1

你想拥有根据喜欢它的用户数量排序的帖子? 如果是这种情况,您可以GROUP BY id_post,在SELECT中添加COUNT(id_user),并在此COUNT(id_user)上添加ORDER BY DESC。

如果我误解了你的问题,你可以更准确地针对你的ORDER BY目标吗?

+0

我需要由那些最喜欢用户的人订购帖子。没有任何喜欢的职位也必须展示,但最后。 – Chris

+0

不,它不工作! – Chris

+0

为什么它不起作用? “GROUP BY”没有返回任何结果?你能用新的查询编辑第一篇文章吗? – Damien