【发布时间】:2017-04-26 06:13:49
【问题描述】:
我有一个从数据库中获取帖子的 SQL 查询。一切正常,但现在我需要按每个帖子的 cmets 数量对结果进行排序。 cmets 位于一个单独的表上,并且它们有一个 post_id 列将其链接到该帖子。我需要根据分片 ID 通过 cmets 表的计数来排序帖子吗?我已经尝试了一切,但每次我尝试向查询中添加一些内容时,它都会完全停止运行并将我的页面留空。我需要帮助才能知道将其他 JOIN 语句放在哪里。这是我的查询:
$union = "UNION ALL
(
SELECT DISTINCT wallposts.p_id,wallposts.is_profile_notes,wallposts.times_viewed,wallposts.columnTimesShared,
wallposts.marked,wallposts.secure_id,wallposts.reshared,wallposts.group_id,
wallposts.totaluploads,wallposts.WallUploadID,wallposts.type,
wallposts.value,wallposts.media,wallposts.youtube,wallposts.post_type,
wallposts.privacy,wallposts.tagedpersons,wallposts.with_friends_tagged,wallposts.emotion_head,wallposts.selected_emotion,wallposts.title,
wallposts.url,wallposts.description,wallposts.cur_image,
wallposts.uip,wallposts.likes,wallposts.userid,
wallposts.posted_by,wallposts.post as postdata,wallusers.*,
UNIX_TIMESTAMP() - wallposts.date_created AS TimeSpent,
PosterTable.mem_pic as posterPic, PosterTable.gender as posterGender,PosterTable.oauth_uid as poster_oauth_uid, PosterTable.username as posterUsername,
PosterTable.mem_fname as posterFname,PosterTable.work as posterWork,
PosterTable.mem_lname as posterLname,walllikes_track.id as PostLikeFound,wallposts.date_created
FROM
wallusers,wallusers as PosterTable, wallposts
LEFT JOIN walllikes_track
ON wallposts.p_id = walllikes_track.post_id AND walllikes_track.member_id = ".$user_id."
WHERE
wallusers.active = 1
AND
PosterTable.active = 1
AND
wallposts.group_id IN (".$groups.")
AND
wallposts.group_id != 0
AND
PosterTable.mem_id = wallposts.posted_by
AND
wallposts.marked < ".$this->flagNumber."
AND
wallusers.mem_id = wallposts.posted_by ) ";
cmets 表称为 wallcmets,它有一个名为 post_id 的列。我知道我需要使用 JOIN 和 COUNT,但我不知道在我当前的代码中将它放在哪里。
【问题讨论】:
-
在子查询中添加一个额外的连接,用于查找每个帖子的评论数并使用它。我无法给出确切的答案,因为遗漏了太多细节,而且您的查询一团糟。
-
我应该在哪里插入 JOIN?这就是我的困境。每当我对查询进行任何更改时。它完全停止运行。
-
是的,因为您的查询内容广泛且难以理解,正如问题所在。下一次,通过展示您的问题的最小示例来提出更好的问题。没有人可以重现您现在的查询,因为甚至没有任何数据可供使用。