mySql - создание соединения с помощью списка запятой разделило значения

У меня есть таблица с полем для имени Продавца и полем с Услугами, которые они предоставляют. Поле Services является списком разделенных запятой значений целых чисел, которые касаются другой таблицы Services с Сервисным идентификатором и Сервисными Полями имени.

Я пытаюсь создать единый запрос, который присоединяется к тем двум, таким образом, у меня может быть список Продавцов, наряду с Сервисными Названиями. Мое решение до сих пор состояло в том, чтобы сделать второй цикл в моей начальной букве 'foreach' цикл, но это может означать призывы на 5 или 6 дб к каждому Торговому имени.

После некоторого StackOverflow-луга (луг Google) я заметил, что использование запятой отделилось, поле является, вероятно, не лучшим способом пойти.

У кого-либо есть или способ сделать соединение или мысли о том, как структура дб могла быть настроена лучше?Заранее большое спасибо!

6
задан TerryMatula 25 June 2010 в 18:43
поделиться

2 ответа

Merchant
MerchantId   Name
          1   Adams Consulting

Merchant_Services
MerchantId    Service
         1    SEO
         1    Brand Consulting

Фактически вы можете получить обратно список, разделенный запятыми:

SELECT m.*, GROUP_CONCAT(ms.Service) AS Services
FROM Merchant m
LEFT JOIN Merchant_Serivces ms
ON ms.MerchantId = m.MerchantId
GROUP BY m.MerchantId
ORDER BY m.Name, ms.Service

Результат в:

MerchantID  Name              Services
----------  ----------------  --------------------
         1  Adams Consulting  Brand Consulting,SEO
5
ответ дан 9 December 2019 в 22:28
поделиться

Кратковременным решением вашей проблемы является использование функции FIND_IN_SET для объединения таблиц MERCHANT и SERVICES:

SELECT *
  FROM MERCHANT m
  JOIN SERVICES s ON FIND_IN_SET(s.service_id, m.services) > 0

Долгосрочное решение - исправить ваши таблицы - никогда не позволяйте столбцам содержать разделенные запятыми списки значений ссылочных идентификаторов и т. д.

6
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: