2012-12-20 29 views
1

我有一个查询,除了从与帖子相关的评论中获取最大日期之外,它运行良好。MySQL一对多子查询max UNIX_TIMESTAMP()从日期

那么什么即时试图做的是:

  • 关系:1员额许多评论
  • 获取的最新评论日期“为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 

回答

0

查询本身看起来有点怪对我来说 - 左加入似乎已损坏,请再次检查:

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 
+0

你是什么意思左加入似乎被损坏。林不知道我是否甚至需要使用LEFT JOIN。我将你的代码复制并粘贴到phpmyadmin中,这里是错误 - #1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第27行'SELECT date_created as commentdate_created'处使用正确的语法。 – Codded

+0

我所做的一切 - 格式化给出的代码以便它可读 – t1gor

+0

好的,并不真正帮助我已经读过它,因为我写了它。为什么不只编辑我的问题并重新格式化。 – Codded