php - 如何根据分片 ID 按另一个表的计数对 SQL 查询的结果进行排序?

标签 php mysql

我有一个从数据库获取帖子的 SQL 查询。一切正常,但现在我需要根据每个帖子的评论数量对结果进行排序。评论位于单独的表中,并且有一个 post_id 列将其链接到帖子。我需要根据分片 ID 按评论表的数量对帖子进行排序吗?我已经尝试了一切,但每次我尝试向查询中添加某些内容时,它都会完全停止运行并将页面留空。我需要帮助才能知道将其他 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 ) ";

评论表称为 wallcomments,它有一个名为 post_id 的列。我知道我需要使用 JOIN 和 COUNT,但我不知道将其放在当前代码中的何处。

最佳答案

尝试这个查询,我没有运行,但我更新了它。

SELECT 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 
               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 ) " AND wallposts.p_id = walllikes_track.post_id AND walllikes_track.member_id = ".$user_id.";

关于php - 如何根据分片 ID 按另一个表的计数对 SQL 查询的结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626349/

相关文章:

php - 计算高负载下的展示次数

php - CodeIgniter:如何将用户当前所在页面的链接设为 'highlight'?

php - 如何使用 PHP 在 MySQL 中的两个表上同时执行两个 select 语句

mysql - 两个整数列之间的差异无法按预期工作

mysql - Wordpress 查询错误的数据库

php - MySQL 空间扩展和 PHP

mysql - 在 mysql 中使用更新限制

php - 省略/忽略用户已购买的任何记录

php - 优化周一1-9时段的表结构

php - 浏览器性能问题