[英]MySQL query to select rows matching criteria and rows related to the matching rows
[英]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.