MySQL, присоединяющийся к столбцу a IN (столбец b) - PullRequest
0 голосов
/ 01 февраля 2011

Привет, мне интересно, возможно ли сделать что-то вроде ниже. Очевидно, я пытался запустить это в phpMyAdmin, но есть ошибка. Возможно, есть другой способ написать этот запрос.

SELECT * FROM eat_eat_restaurants AS r 
INNER JOIN eat_eat_cuisines AS c ON c.cuisine_id IN (r.cuisine_ids)

В дополнение к этому можно ли выбрать название ресторана и кухню в одном ряду? например

r_name    c_names
Marco's   Italian, Modern European

Мои 2 таблицы выглядят так:

TABLE EAT_EAT_RESTAURANTS
id  r_name    cuisine_ids
1   Marco's   1,2
2   Beldaro   3,4
3   Benny's   1,3


TABLE EAT_EAT_CUISINES
id  c_name
1   Italian
2   Modern European
3   Greek
4   Belgian
5   ...

Ответы [ 4 ]

2 голосов
/ 01 февраля 2011

Ваша текущая схема не нормализована и очень неэффективна. Попробуйте 3 таблицы: restaurants, cuisines и restaurant_cuisines и выполните запрос следующим образом:

SELECT r.r_name, GROUP_CONCAT(c.c_name)
FROM restaurants r JOIN restaurant_cuisines rc ON (r.id=rc.r_id)
 JOIN cuisines c ON (rc.c_id=c.id)
GROUP BY r.r_name;
1 голос
/ 01 февраля 2011

нужен третий стол:

TABLE EAT_EAT_CUISINES_LOOKUP
r_id    cuisine_ids 1   
1       1
1       2 
// for Marco

далее присоединиться к нему, если необходимо получить 1 строку, используйте GROUP_CONCAT ()

1 голос
/ 01 февраля 2011

Нет, синтаксис так не работает.

Вам нужно создать перекрестную таблицу между ресторанами и кухнями, поскольку кухня может принадлежать нескольким ресторанам, а ресторан предлагает несколько кухонь. После этого вы можете присоединиться к трем столам вместе, чтобы получить название ресторана, а также все названия кухонь, которые они предлагают.

Кросс-таблица будет иметь такие поля:

id   restaurant_id   cuisine_id
1    1               1
2    1               2
3    2               1
4    2               3
5    4               1
0 голосов
/ 01 февраля 2011

В качестве другого решения я бы порекомендовал использовать таблицу соединений, которая упростит ваш запрос. Давайте назовем это: restaurant_cuisine Пример:

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