繁体   English   中英

Mysql查询选择行,或者匹配其他表上的行

[英]Mysql query to select rows and alternatively matching rows on other table

我有两张桌子:

user
ID ---姓名

posts
ID --- UserID ---文本--- Postdate

现在我想选择他们在过去15分钟内完成的所有用户和每个帖子。 我还希望显示每个用户根本没有匹配条件的帖子。

我现在这样做:

$user_q = mysql_query("SELECT * FROM user");
while ($a = mysql_fetch_assoc($user_q))
{
     $post_q = mysql_query("SELECT * FROM posts WHERE Userid=".$a['ID']." AND Postdate >= DATE_SUB(NOW(), INTERVAL 15 MINUTE)");
     //Do anything with this information
}

您是否有任何想法如何将所有这些信息放在一个查询中? 执行这么多查询会使服务器运行速度很慢。

你想要的是一个左外连接:

select u.*, p.*
from users u left outer join
     posts p
     on u.id = p.userid and
        p.Postdate >= DATE_SUB(NOW(), INTERVAL 15 MINUTE);

left outer join保留第一个表中的所有行。 如果第二个表中没有任何内容匹配,则使用条件,那些字段的值为NULL

编辑:

如果要将此限制为50个随机用户,可以在users级别执行此操作:

select u.*, p.*
from (select u.*
      from users u
      order by rand()
      limit 50
     ) u left outer join
     posts p
     on u.id = p.userid and
        p.Postdate >= DATE_SUB(NOW(), INTERVAL 15 MINUTE);

order by rand()order by rand()使它们随机。 您可以通过任何方式订购 - 名称,创建日期,等等。 您甚至可以退出order by ,只需获取数据库返回的50个任意行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM