Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-group_concat拉入其他不正确的数据_Mysql_Sql_Join_Group Concat - Fatal编程技术网

MySQL-group_concat拉入其他不正确的数据

MySQL-group_concat拉入其他不正确的数据,mysql,sql,join,group-concat,Mysql,Sql,Join,Group Concat,我在加入和小组会议方面遇到问题。查询正在连接不应与联接关联的其他数据 以下是我的表格结构: linkages ID table_name tag_id 1 subcategories 6 2 categories 9 music ID artwork 1 5 2 4 artwork ID url_path 1 /some/file/path 2 /some

我在
加入
小组会议
方面遇到问题。查询正在连接不应与联接关联的其他数据

以下是我的表格结构:

linkages
ID       table_name     tag_id
1        subcategories  6
2        categories     9

music
ID       artwork
1        5
2        4

artwork
ID       url_path
1        /some/file/path
2        /some/file/path
我的问题是:

SELECT music.*,
       artwork.url_path AS artwork_url_path,
       GROUP_CONCAT( linkages.tag_id ) AS tag_ids,
       GROUP_CONCAT( linkages.table_name ) AS table_name 
FROM music
LEFT JOIN artwork ON artwork.id = music.artwork 
LEFT JOIN linkages ON music.id = linkages.track_id 
WHERE music.id IN( '1356',
                   '1357',
                   '719',
                   '169',
                   '170',
                   '171',
                   '805' )
ORDER BY FIELD( music.id,
                1356,
                1357,
                719,
                169,
                170,
                171,
                805 )
这是
组的结果\u CONCAT

[tag_ids] => 3, 6, 9, 17, 19, 20, 26, 49, 63, 64, 53, 57, 63, 65, 67, 73, 79, 80, 85, 96, 98, 11, 53, 67, 3, 6, 15, 17, 26, 38, 50, 63, 74, 53, 56, 57, 62, 63, 65, 66, 67, 72, 85, 88, 98, 24, 69, 71, 3, 6, 15, 17, 26, 38, 50
结果的第一部分是正确的:

[tag_ids] => 3, 6, 9, 17, 19, 20, 26, 49, 63, 64, 53, 57, 63, 65, 67, 73, 79, 80, 85, 96, 98, 11, 53, 67
在正确的值之后的一切看起来都是随机的,并且大多数值在数据库的结果中都不存在,但它仍然将其拉入。它似乎重复了正确结果的一部分(
3,6,15,17
-
3,6,17
是正确的,但是
15
不应该在那里,类似于一堆其他数字-
71
,等等。我不能使用
DISTINCT
,因为我需要将
标记id
表名
作为多维数组从结果进行匹配

有没有想过为什么

更新: 我最终通过Gordon的初始推送解决了它。它需要一个GROUP_BY子句,否则它会将每个结果标记id放入每个结果中。最终的查询结果如下:

SET SESSION group_concat_max_len = 1000000;
SELECT 
music.*, 
artwork.url_path as artwork_url_path,
GROUP_CONCAT(linkages.tag_id, ':', linkages.table_name) as tags 
FROM music 
LEFT JOIN artwork ON artwork.id = music.artwork 
LEFT JOIN linkages ON music.id = linkages.track_id 
WHERE music.id IN('1356', '1357', '719', '169', '170', '171', '805') 
GROUP BY music.id
ORDER BY FIELD(music.id,1356,1357,719,169,170,171,805);

您的
join
正在生成重复的行。我建议您解决问题的根本原因。但是,一个快速而肮脏的解决方案是使用
group\u concat(distinct)

您可以使用
GROUP\u CONCAT()
将列放在单个字段中:


谢谢。我不能使用distinct,因为我需要将tag_id和table_name结果作为多维数组进行匹配。你知道如何修复连接吗?谢谢你的指导。我最终解决了这个问题,并在我的原始问题中发布了一个更新。请共享你的表架构。在你的数据中,有多个链接。每个music.id跟踪_id,我不是吗?谢谢,我刚刚发布了我正在使用的两个表的结构。
GROUP_CONCAT(DISTINCT linkages.tag_id) as tag_ids, 
GROUP_CONCAT(DISTINCT linkages.table_name) as table_name 
GROUP_CONCAT(DISTINCT linkages.tag_id, ':', linkages.table_name) as tags