【问题标题】:multiple query concat多查询连接
【发布时间】:2012-02-20 20:41:59
【问题描述】:

嗨,我一直在研究 mysql 查询并遇到问题。
我有一个名为“friends”的表,其中包含以下列:id、user1 和 user2。 我正在尝试创建一个查询,我可以在其中获得 1 条记录,结果是连接 user1 列中的所有用户和 user2 列中与特定用户相关的所有用户,以获得包含所有用户朋友的结果.例如,“朋友”表可能包含:

****朋友们**** id 用户 1 用户 2 0 33 1 1 33 2 2 34 25 3 3 33 4 27 33

我想要的结果是一条名为“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


【解决方案1】:

如果我正确理解您的问题,我认为这应该有效

选择 GROUP_CONCAT(a.friendships, b.friendships) 作为 x from ( (SELECT (CAST(GROUP_CONCAT(user2) AS CHAR(10000) CHARACTER SET utf8)) 作为朋友的友谊,其中 user1 = 33) 作为一个, (SELECT (CAST(GROUP_CONCAT(user1) AS CHAR(10000) CHARACTER SET utf8)) 作为朋友的友谊,其中 user2 = 33) 作为 b )

【讨论】:

  • 谢谢,这个答案有效,ypercubes 也有效,你认为哪个是更好的选择?我尝试一遍又一遍地运行它们,但时间差异很大
【解决方案2】:
SELECT 
    CAST(GROUP_CONCAT(u) AS CHAR(10000) CHARACTER SET utf8) AS friendships 
FROM
  ( SELECT user2 AS u
    FROM friends 
    WHERE user1 = 33
  UNION ALL
    SELECT user1
    FROM friends 
    WHERE user2 = 33
  ) AS tmp

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 2018-08-07
    • 2023-04-08
    • 2012-04-27
    • 2022-01-06
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多