Как использовать объединить, что тянуть запятые значения с MySQL

У меня есть таблицы tbl_restaurant (имя, kitchen_id,....) и tbl_cuisine (kitchen_id, kitchen_name)

В tbl_restaurant поле kitchen_id содержит значения, разделенные запятыми (,), такие как (3,6,9,20,31), и когда я пытаюсь получить имя kitchen_name, используя join, он принимает только первый идентификатор (т. Е. 3) в указанном выше случае. У меня был запрос:

SELECT tbl_restaurant.name, tbl_restaurant.cuisine_id, tbl_cuisine.cuisine_id,
tbl_cuisine.cuisine_name
FROM tbl_restaurant
LEFT JOIN tbl_cuisine ON tbl_restaurant.cuisine_id = tbl_cuisine.cuisine_id
WHERE tbl_restaurant.published =1
AND tbl_restaurant.id =$id

я должен разобрать перед использованием join или еще? Любое предложение, пожалуйста.

2 ответа

Решение

Вы можете использовать функцию FIND_IN_SET() для объединения двух таблиц.

Попробуй это:

SELECT r.name, r.cuisine_id, GROUP_CONCAT(c.cuisine_name)
FROM tbl_restaurant r
LEFT JOIN tbl_cuisine c ON FIND_IN_SET(c.cuisine_id, r.cuisine_id)
WHERE r.published =1 AND r.id = $id
GROUP BY r.id;

Проверьте демонстрацию SQL FIDDLE

ВЫХОД

| NAME | CUISINE_ID | GROUP_CONCAT(C.CUISINE_NAME) |
|------|------------|------------------------------|
|  abc |    1,2,6,8 |    Nepali,Indian,Thai,Korean |

Используйте FIND_IN_SET и GROUP_CONCAT

SELECT r.name, r.cuisine_id, GROUP_CONCAT(c.cuisine_name)
FROM tbl_restaurant r
LEFT JOIN tbl_cuisine c ON FIND_IN_SET(c.cuisine_id, r.cuisine_id)
WHERE r.published =1 AND r.id = $id
GROUP BY r.id;

Выход:

| NAME | CUISINE_ID | GROUP_CONCAT(C.CUISINE_NAME) |
|------|------------|------------------------------|
|  abc |    1,2,6,8 |    Nepali,Indian,Thai,Korean |
Другие вопросы по тегам