我想合并两个查询的结果。我使用了 select union 但它强加了我的网站。 (根据记录,我的 php 内存限制是 128M)我如何在不强加服务器的情况下组合这些查询的结果?
第一个查询
SELECT mybb_posts.pid, mybb_posts.dateline, mybb_posts.subject, mybb_users.username, mybb_users.avatar, mybb_posts.message
FROM mybb_posts, mybb_users
WHERE mybb_posts.uid = mybb_users.uid AND mybb_posts.fid <> 170 AND mybb_posts.fid <> 77 AND mybb_posts.fid <> 96
ORDER BY mybb_posts.dateline DESC
第二个查询
SELECT ek_yorumlar.id, ek_yorumlar.zaman, ek_yorumlar.icisim, mybb_users.username, mybb_users.avatar, ek_yorumlar.turu
FROM ek_yorumlar, mybb_users
WHERE ek_yorumlar.gonderen = mybb_users.uid
ORDER BY ek_yorumlar.zaman DESC
联合查询
SELECT * FROM(
SELECT mybb_posts.pid, mybb_posts.dateline, mybb_posts.subject, mybb_users.username, mybb_users.avatar, mybb_posts.message
FROM mybb_posts, mybb_users
WHERE mybb_posts.uid = mybb_users.uid AND mybb_posts.fid <> 170 AND mybb_posts.fid <> 77 AND mybb_posts.fid <> 96
ORDER BY mybb_posts.dateline DESC
) AS T
UNION ALL
SELECT * FROM (
SELECT ek_yorumlar.id, ek_yorumlar.zaman, ek_yorumlar.icisim, mybb_users.username, mybb_users.avatar, ek_yorumlar.turu
FROM ek_yorumlar, mybb_users
WHERE ek_yorumlar.gonderen = mybb_users.uid
ORDER BY ek_yorumlar.zaman DESC
) AS T
ORDER BY dateline DESC LIMIT 25
最佳答案
您已达到内存限制,因为此查询将符合您条件的所有行添加到内存中,然后将其减少到 25 行。如果您首先减少每个组件中的行数,那么它应该通过仅先查看每个查询一半然后每个查询返回 25 行来减少内存负担,因此它只会考虑 50 行。
SELECT * FROM(
SELECT mybb_posts.pid, mybb_posts.dateline, mybb_posts.subject, mybb_users.username, mybb_users.avatar, mybb_posts.message
FROM mybb_posts
inner join mybb_users on mybb_posts.uid = mybb_users.uid
WHERE mybb_posts.fid not in (170 ,77 ,96)
ORDER BY mybb_posts.dateline DESC LIMIT 25
) AS T
UNION
SELECT * FROM (
SELECT ek_yorumlar.id, ek_yorumlar.zaman, ek_yorumlar.icisim, mybb_users.username, mybb_users.avatar, ek_yorumlar.turu
FROM ek_yorumlar
inner join mybb_users on ek_yorumlar.gonderen = mybb_users.uid
ORDER BY ek_yorumlar.zaman DESC LIMIT 25
) AS T
ORDER BY dateline DESC LIMIT 25
或者,您可以创建临时表作为减少任何单个步骤中执行的计算量的一种方式...
create temporary table firsthalf
SELECT mybb_posts.pid, mybb_posts.dateline, mybb_posts.subject, mybb_users.username, mybb_users.avatar, mybb_posts.message
FROM mybb_posts
inner join mybb_users on mybb_posts.uid = mybb_users.uid
WHERE mybb_posts.fid not in (170 ,77 ,96)
ORDER BY mybb_posts.dateline DESC LIMIT 25;
create temporary table secondhalf
SELECT ek_yorumlar.id, ek_yorumlar.zaman, ek_yorumlar.icisim, mybb_users.username, mybb_users.avatar, ek_yorumlar.turu
FROM ek_yorumlar
inner join mybb_users on ek_yorumlar.gonderen = mybb_users.uid
ORDER BY ek_yorumlar.zaman DESC LIMIT 25;
select * from firsthalf
union all
select * from secondhalf
ORDER BY dateline DESC LIMIT 25
关于php - 我如何组合这些 sql 查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211372/