gpt4 book ai didi

php - 合并两个复杂查询

转载 作者:行者123 更新时间:2023-11-29 04:30:27 25 4
gpt4 key购买 nike

我最后做的是采用两个 SQL 查询并使用 PHP 中的 array_intersect() 来过滤结果:

$sql1 = 'SELECT z.*, u.username, u.user_colour, u.username_clean, u.user_avatar, u.user_avatar_type
FROM ' . ZEBRA_TABLE . ' z, ' . USERS_TABLE . ' u
WHERE (( z.user_id = ' . $user->data['user_id'] . '
AND z.friend = 1
AND u.user_id = z.zebra_id )
OR ( z.zebra_id = ' . $user->data['user_id'] . '
AND z.friend = 1
AND u.user_id = z.user_id ))
ORDER BY u.username_clean ASC';

$sql2 = 'SELECT z.*, u.username, u.user_colour, u.username_clean, u.user_avatar, u.user_avatar_type
FROM ' . ZEBRA_TABLE . ' z, ' . USERS_TABLE . ' u
WHERE (( z.user_id = ' . $user_id . '
AND z.friend = 1
AND u.user_id = z.zebra_id )
OR ( z.zebra_id = ' . $user_id . '
AND z.friend = 1
AND u.user_id = z.user_id ))
ORDER BY u.username_clean ASC';

两个查询的结构相同,唯一的区别是 $user->data['user_id](第一人称)被替换为 $user_id(第二人称)人)在第二个查询中。我想检索两个用户共有的 friend 。任何人都可以将其合并为一个查询,这样我就不必使用两个查询并调用 array_intersect() 了吗?

最佳答案

好吧,你总是可以对两者进行子查询:

$sql = 'SELECT a.* 
FROM ('.$sql1.') AS a
JOIN ('.$sql2.') AS b ON a.user_id = b.user_id AND a.username = b.username';

您可能希望将 u.user_id 添加到两个查询的字段列表中 u.user_id AS u_user_id 然后将第二个连接子句从 a.username 更改为= b.usernamea.u_user_id = b.u_user_id...

编辑:现在我真的仔细观察了它,这两个查询几乎相同......为什么不做这样的事情(将 where 子句替换为此):

WHERE z.friend = 1 
AND (
( z.user_id = '.$user_id.' AND u.user_id = z.zebra_id )
OR
(z.zebra_id = '.$user_id.' AND u.user_id = z.user_id )
) AND (
( z.user_id = '.$user->data['user_id'].' AND u.user_id = z.zebra_id )
OR
(z.zebra_id = '.$user->data['user_id'].' AND u.user_id = z.user_id )
)

这应该给你两个查询相交的结果,并且更快,因为它可以更好地优化(希望)......

哦,它们位于不同的 where block 中,因为在某些情况下 z.user_id 匹配 $user_id,但 z.zebra_id匹配 $user->data['user_id']... 所以我没有列出所有排列,而是像这样布局...

关于php - 合并两个复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303714/

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