gpt4 book ai didi

php - 使用 LIMIT 组合 2 个 MySQL select 语句

转载 作者:行者123 更新时间:2023-11-29 02:22:49 25 4
gpt4 key购买 nike

我正在制作一个信息流墙,两个服务将帖子保存到同一个数据库表中。

一个发布服务的使用方式比另一个多,所以在墙上我想将每项服务限制在首页上的 25 个最新帖子(总共 50 个)以实现平等的代表性。

这是我原来的,没有晚上的帖子:

$sql = "SELECT * FROM posts";
$sql .= " WHERE disq = 0";
$sql .= " AND approved = 1";
$sql .= " ORDER BY created_at DESC";
$sql .= " LIMIT 50";

但后来我尝试通过服务限制它们:

$sql_1 = "SELECT * FROM posts";
$sql_1 .= " WHERE disq = 0";
$sql_1 .= " AND approved = 1";
$sql_1 .= " AND source = 'TW'";
$sql_1 .= " ORDER BY created_at DESC";
$sql_1 .= " LIMIT 25";

$sql_2 = "SELECT * FROM posts";
$sql_2 .= " WHERE disq = 0";
$sql_2 .= " AND approved = 1";
$sql_2 .= " AND source = 'IG'";
$sql_2 .= " ORDER BY created_at DESC";
$sql_2 .= " LIMIT 25";

做类似的事情

$sql = $sql_1 UNION $sql_2;

似乎不起作用,因为我看到的所有示例都在一堆查询结束时执行 LIMIT。之后应该执行 ORDER BY,按时间顺序重新排列帖子,使墙混合服务。

感谢 MySQL 的帮助

最佳答案

您可以在子查询中省略 ORDER BY,并在联合之后的最后执行。

(
SELECT * FROM POSTS
WHERE disq = 0 AND approved = 1 AND source= 'TW'
LIMIT 25
)
UNION ALL
(
SELECT * FROM POSTS
WHERE disq = 0 AND approved = 1 AND source= 'IG'
LIMIT 25
)
ORDER BY created_at DESC

关于联合和如何排序的更多信息在 this MySQL documentation 中解释。

关于php - 使用 LIMIT 组合 2 个 MySQL select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com