1

投稿に関連するコメントから最大日付を取得することとは別に、うまく機能しているクエリがあります。

だから私がやろうとしていることは次のとおりです:

  • 関係: 1 つの投稿と多くのコメント
  • max() を使用して UNIX_TIMESTAMP() で各投稿の「最新のコメント日」を取得します
  • 「最新の投稿日」または「最新のコメント日」のいずれかでクエリ全体を並べ替えます。そのため、行ごとに「最新の投稿日」または「最新のコメント日」で並べ替えます。
  • したがって、一番上のレコードは、最新の投稿か、または投稿にコメントがある場合は、一番上に移動するすべての投稿です。

どんな助けでも大歓迎です。

最大の最新コメント日付を取得せずに機能し、最新でソートするクエリ

SELECT DISTINCT wallposts.p_id,wallposts.type,wallposts.value,wallposts.media,wallposts.youtube,wallposts.post_type,wallposts.tagedpersons,wallposts.title AS thetitle,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,wallposts.date_created,wallposts.course 
        FROM wallposts,wallusers
        where (
        wallposts.userid =4276 OR
        wallposts.tagedpersons LIKE '%4276%' OR
        EXISTS (SELECT * FROM wallcomments WHERE wallposts.p_id = wallcomments.post_id AND wallcomments.tagedpersons LIKE '%4276%')
        ) 
        AND wallusers.mem_id = wallposts.userid
        order by wallposts.p_id desc 

問題を解決しようとしたが失敗したもの:

   SELECT DISTINCT wallposts.p_id,wallposts.type,wallposts.value,wallposts.media,wallposts.youtube,wallposts.post_type,wallposts.tagedpersons,wallposts.title AS thetitle,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,wallposts.date_created,wallposts.course 
                FROM wallposts,wallusers
                JOIN wallusers wu on wallposts.userid = wu.mem_id
                LEFT JOIN wallcomments wc ON wc.post_id(SELECT date_created as commentdate_created, UNIX_TIMESTAMP() - max(date_created) as latestcomment
                FROM wallcomments wc WHERE wallposts.p_id = wc.post_id LIMIT 1)
                where (
                wallposts.userid = 4276 OR
                wallposts.tagedpersons LIKE '%4276%' OR
                EXISTS (SELECT * FROM wallcomments WHERE wallposts.p_id = wallcomments.post_id AND wallcomments.tagedpersons LIKE '%4276%')
                ) 
                order by greatest(latestcomment, TimeSpent) DESC
4

1 に答える 1

0

クエリ自体が少し奇妙に見えます - LEFT JOIN が壊れているようです。もう一度確認してください:

SELECT 
      DISTINCT wallposts.p_id,
      wallposts.type,
      wallposts.value,
      wallposts.media,
      wallposts.youtube,
      wallposts.post_type,
      wallposts.tagedpersons,
      wallposts.title AS thetitle,
      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,
      wallposts.date_created,
      wallposts.course 
FROM wallposts, wallusers
      JOIN wallusers wu 
            on wallposts.userid = wu.mem_id
      LEFT JOIN wallcomments wc 
            ON wc.post_id (
                  SELECT 
                        date_created as commentdate_created, 
                        UNIX_TIMESTAMP() - max(date_created) as latestcomment
                  FROM wallcomments wc 
                  WHERE wallposts.p_id = wc.post_id LIMIT 1
            )
WHERE (
            wallposts.userid = 4276 OR
            wallposts.tagedpersons LIKE '%4276%' OR
            EXISTS (
                  SELECT * 
                  FROM wallcomments 
                  WHERE wallposts.p_id = wallcomments.post_id 
                        AND wallcomments.tagedpersons LIKE '%4276%'
            )
      )
order by greatest(latestcomment, TimeSpent) DESC
于 2012-12-20T10:41:24.780 に答える