gpt4 book ai didi

mysql - 组合多个复合mysql语句

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

首先我有以下sql语句:

SELECT * FROM members
WHERE username IN (
SELECT friend2 as username FROM list_friends
WHERE (friend1 = 'user' AND friend2 <> 'user')
UNION
SELECT friend1 as username FROM list_friends
WHERE (friend2 = 'user' AND friend1 <> 'user')
)

上面的代码完美运行。它返回“members”表中与给定用户 friend 列表匹配的所有行,该列表是通过在表 list_friends 中搜索给定用户并从列friend1 或friend2 中获取 friend 姓名来创建的。

就像我说的,它工作完美。

接下来我有以下sql语句:

SELECT username,
(SELECT COUNT(*) FROM sites WHERE username = 'user')
+ (SELECT COUNT(*) FROM banners WHERE username = 'user')
+ (SELECT COUNT(*) FROM stream_updates WHERE username = 'user')
AS cnt from members WHERE username = 'user'

这将合并给定行的计数,并将所有 COUNT 的总和输出为列 cnt。

我想将这两个语句结合起来,这样我就可以获得返回friend, cnt的结果。

示例输出非常简单:

   username    |  cnt
----------------------
a friend | 6525
diff friend | 983
yet again | 3485

我可以轻松地在两个 php 循环中运行它,首先从第一个查询中获取 friend 的名字,然后使用 foreach 并在第一个查询的循环中运行第二个查询,我只是想知道是否有一种更好的方法,或者一种将语句组合成一个以获得上述输出的方法。

最佳答案

我认为你只想要相关子查询:

SELECT username,
( (SELECT COUNT(*) FROM sites s WHERE s.username = f.username) +
(SELECT COUNT(*) FROM banners b WHERE b.username = f.username) +
(SELECT COUNT(*) FROM stream_updates su WHERE su.username = f.username)
) as cnt
FROM (SELECT friend2 as username
FROM list_friends
WHERE friend1 = 'user' AND friend2 <> 'user'
UNION
SELECT friend1 as username
FROM list_friends
WHERE friend2 = 'user' AND friend1 <> 'user'
) f;

注意:此处不需要 members 表。您拥有其他表中的用户名

关于mysql - 组合多个复合mysql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736903/

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