Php mysql查询帮助?

Php mysql查询帮助?,php,sql,mysql,Php,Sql,Mysql,这个deos是什么?它查询用户日志、他们跟踪的人并检索他们的消息。表格如下所示 我想添加到这个查询中的还有userloggedin更新。但很明显,用户并不跟随自己。我能做的最好的方法是什么 用户表 消息表 关系表 最明显的解决方案是使用另一个类似的查询来检索登录用户的消息。大概是这样的: leader | follower ------------------ 1 | 2 ( SELECT u.username, u.picture, m.id, m.user_note, m.r

这个deos是什么?它查询用户日志、他们跟踪的人并检索他们的消息。表格如下所示

我想添加到这个查询中的还有userloggedin更新。但很明显,用户并不跟随自己。我能做的最好的方法是什么

用户表 消息表 关系表
最明显的解决方案是使用另一个类似的查询来检索登录用户的消息。大概是这样的:

leader | follower
------------------
     1 | 2
(
  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,或者使用如下派生表:

leader | follower
------------------
     1 | 2
(
  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']."'
);

最明显的解决方案是使用另一个类似的查询来检索登录用户的消息。大概是这样的:

leader | follower
------------------
     1 | 2
(
  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,或者使用如下派生表:

leader | follower
------------------
     1 | 2
(
  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']."'
);
这个怎么样:

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;
这个怎么样:

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;


这也是我正在使用的,但我认为这可能是另一种方式@网关:它比UNION快一点,因为它不删除重复项。如果我理解正确,那么这两个查询中不应该有重复项。对不起,看到ANSI-89连接语法,我会畏缩,但是+1如果我想按Dt(即日期)排序整个结果,我会为每个查询排序,还是只在最后一个查询排序end@OMG:是的,我也是。它是如此的80年代:这也是我正在使用的,但我认为它可能是另一种方式@网关:它比UNION快一点,因为它不删除重复项。如果我理解正确,那么这两个查询中不应该有重复项。对不起,看到ANSI-89连接语法,我会畏缩,但是+1如果我想按Dt(即日期)排序整个结果,我会为每个查询排序,还是只在最后一个查询排序end@OMG:是的,我也是。它是如此的80年代:我认为这将不起作用,因为与关系的内部连接。这复制了记录,虽然我认为我遗漏了用户连接的注释-现在试试。非常好!!!我如何从关系r中选择r.leader,其中r.listener='.$会话['user\u id'.]中检索整个结果,例如,对于本条款中的insatnce,其中dt>'2010-09-20_131830; m.user\u id='.$\u会话['user\u id'.'或m.userID'.和dt>'2010-09-20_131830'我认为这不会起作用,因为与关系的内部连接。这会复制记录,尽管我认为我遗漏了用户连接的注释-现在就尝试。非常好!!!我如何从关系r中选择r.leader中的dt>'2010-09-20_131830;其中m.user_id='.$_SESSION['user_id'.]或m.userID来检索整个结果,其中r.listener='.$_SESSION['user_id'.'和dt>'2010-09-20_131830'