mysql查询帮助?

时间:2010-09-21 17:41:53

标签: php sql mysql

(
  SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
  FROM   relationships r
  JOIN notes m ON m.user_id = r.leader
  JOIN user u ON r.leader = u.user_id
  WHERE r.listener ='2'
)


UNION ALL
(
  SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
  FROM   notes m
  JOIN user u ON m.user_id = u.user_id
  WHERE u.user_id ='2'
)
WHERE dt > '2010-09-20_131830'
ORDER BY dt DESC

这是什么,它询问用户(登录),他们关注的人并检索他们的消息。表格如下所示,!

我想要添加到此查询中,也是用户(登录)更新以及。但显然用户deosnt跟随自己。什么是我能做到的最佳方式!!

USER_TABLE

 user_id | username
 -------------------
       1 | solomon
       2 | muna

消息表

id    user_id| message
---------------------------------------
 1       1   | this is my first message
 2       1   | this is my second message
 3       2   | this is muna message    

关系表

leader | follower
------------------
     1 | 2

2 个答案:

答案 0 :(得分:2)

最明显的解决方案是UNION ALL您的查询,另一个类似查询检索登录用户的消息。像这样:

(
  SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
  FROM   relationships r
  JOIN   notes m ON m.user_id = r.leader
  JOIN   user u ON r.leader = u.user_id
  WHERE  r.listener ='".$_SESSION['user_id']."'
)
UNION ALL
(
  SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
  FROM   notes m
  JOIN   user u ON m.user_id = u.user_id
  WHERE  u.user_id ='".$_SESSION['user_id']."'
);

<强>更新

在更新的查询之后,您不能拥有WHERE子句。您应该为每个查询分别使用WHERE,或者使用这样的派生表:

SELECT *
FROM
((
  SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
  FROM   relationships r
  JOIN   notes m ON m.user_id = r.leader
  JOIN   user u ON r.leader = u.user_id
  WHERE  r.listener ='".$_SESSION['user_id']."'
)
UNION ALL
(
  SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
  FROM   notes m
  JOIN   user u ON m.user_id = u.user_id
  WHERE  u.user_id ='".$_SESSION['user_id']."'
)) d
WHERE    d.dt > '2010-09-20_131830'
ORDER BY d.dt DESC;

答案 1 :(得分:2)

这个怎么样:

SELECT u.username, u.picture, m.id, m.user_note, m.reply_id, m.reply_name, m.dt
FROM notes m
INNER JOIN user u
ON m.user_id = u.user_id
WHERE (m.user_id = '".$_SESSION['user_id']."'
OR m.userID IN (
   SELECT r.leader
   FROM relationships r
   WHERE r.listener ='".$_SESSION['user_id']."'))