MySQL left join и group_concat возвращают дубликаты и обрезанные данные - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть несколько таблиц, из которых я пытаюсь SELECT получить достаточно много данных. У меня есть таблица с именем xguilds_guilds, которая является основной таблицей, из которой я выбираю данные. У меня также есть таблица под названием xguilds_players. Все игроки подключены к записи в xguilds_guilds. То же самое касается xguilds_permissions, где каждое разрешение связано с записью xguilds_guilds.

Мой запрос на выборку выглядит следующим образом:

SELECT `xguilds_guilds`.*,
  GROUP_CONCAT(`xguilds_permissions`.`permission`) AS `permissions`,
  GROUP_CONCAT(`xguilds_permissions`.`rank`) AS `ranks`,
  GROUP_CONCAT(`xguilds_players`.`uuid`) AS `players`,
  GROUP_CONCAT(`xguilds_players`.`rank`) AS `plranks`
FROM `xguilds_guilds`
  LEFT JOIN `xguilds_permissions` ON `xguilds_guilds`.`id` = `xguilds_permissions`.`guild`
  LEFT JOIN `xguilds_players` ON `xguilds_guilds`.`id` = `xguilds_players`.`guild`
WHERE `admin` = 0
GROUP BY `xguilds_guilds`.`id`;

Однако по какой-то причине записи из объединенные таблицы не выбираются правильно. Например, у меня есть гильдия с идентификатором 6, где я ожидаю выбрать следующее для столбца players:

030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5

Тем не менее, он фактически выбирает следующую строку, в которой uuids постоянно находятся повторил и отрезал в конце:

030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e

Понятия не имею, что вызывает это странное поведение. У меня нет большого опыта в соединении таблиц, что может быть проблемой в этой ситуации. Я также пробовал следующий запрос, и он работал правильно:

SELECT `xguilds_guilds`.*,
  GROUP_CONCAT(`xguilds_players`.`uuid`) AS `players`
FROM `xguilds_guilds`
  LEFT JOIN `xguilds_players` ON `xguilds_guilds`.`id` = `xguilds_players`.`guild`
WHERE `guild` = 6
GROUP BY `xguilds_guilds`.`id`;

Любая помощь приветствуется. Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...