【发布时间】:2012-02-20 20:41:59
【问题描述】:
嗨,我一直在研究 mysql 查询并遇到问题。
我有一个名为“friends”的表,其中包含以下列:id、user1 和 user2。
我正在尝试创建一个查询,我可以在其中获得 1 条记录,结果是连接 user1 列中的所有用户和 user2 列中与特定用户相关的所有用户,以获得包含所有用户朋友的结果.例如,“朋友”表可能包含:
我想要的结果是一条名为“friendships”的记录,其中数据是包含“1,2,3,27”的单个字符串,因为这些都是用户 33 与之为朋友的所有用户 ID。我能跑:
SELECT (CAST(GROUP_CONCAT(user2) AS CHAR(10000) CHARACTER SET utf8)) 作为朋友的友谊,其中 user1 =33这将返回“1,2”,我可以在单独的查询中反转它以获得“3,27”,但是,如果可能,我会尝试在一个查询中获得结果!感谢所有帮助:)
【问题讨论】:
-
编写两个查询并使用UNION:mysqltutorial.org/sql-union-mysql.aspx
-
我继续尝试联合方法,结果是正确的,但是,将它们连接成一个结果仍然存在问题。与联合我做
select user1 from friends where user2 = 33 union select user2 from friends where user1 = 33
但它不在一个逗号分隔的结果中 -
为什么要强制转换 group_concat?它已经返回一个字符串,客户端软件会将其视为 char/varchar/text。
-
如果我不投,那么结果是
-
联合结果是一堆 SQL 行。我猜
CAST(GROUP_CONCAT())业务会为您将其转换为逗号分隔的字符串。类似于SELECT (CAST(GROUP_CONCAT(x) AS CHAR(10000) CHARACTER SET utf8)) FROM (select user1 x from friends where user2 = 33 union select user2 x from friends where user1 = 33)。
标签: mysql group-concat concat