背景
论坛上有很多类似的问题,但出于某种原因,他们没有帮助我。
我想列出 50 个最近(不早于一个月前)的社交回复(新订阅者、喜欢、评论),请原谅扎克伯格,网络。
也就是说,您需要合并 3 个表,以便同时从中选择最多 50 行并按日期时间对这些行进行排序。这是我的大脑能够做到的:
$getReplies=$pdo->prepare(
"SELECT * FROM followers
FULL OUTER JOIN comments ON comments.replyToUserId = :id AND comments.dateTime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()
FULL OUTER JOIN likes ON likes.toId = :id AND likes.dateTime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()
WHERE followers.toId = :id AND followers.dateTime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()
ORDER BY followers.dateTime DESC, comments.dateTime DESC, likes.dateTime DESC
LIMIT 50"
);
$getReplies->execute(array('id' => $out[0]));
$replies=$getReplies->fetchAll();
但是输出什么都没有。请帮忙,我已经跳完了整个手鼓。
▼ 目前的问题是这样 ▼
根据下面的建议,我是在 UNION 的帮助下完成的。但是我仍然得到一个空数组,即使对于单独运行没有任何问题的最简单的查询也是如此。这里有什么问题?
$getReplies=$pdo->prepare("
SELECT * FROM followers WHERE toId = '1'
UNION
SELECT * FROM likes WHERE toId = '1'
");
$getReplies->execute();
$replies=$getReplies->fetchAll();
我认为请求应该是这个样子:
UNION ALL它,它更快(而且不同表的信息几乎不会重复)。union合并后面丢掉的东西做额外的工作。