MySQL выбирает все записи, которые совпадают с другими записями в другой таблице - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть две таблицы: таблица _ модели с полями имя и model_id и таблица _ теги с полями tag_name, tags_id и model_id

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

Как выбрать из таблицы _models только те модели, которые имеют одинаковые теги , назначенные в _tags таблица?

Например, мне нужно выбрать все модели, которым назначен тег #jacket и тег # trench

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Немного другой способ сделать то же самое:

SELECT
      m.model_id
    , m.name
FROM
    _models m
WHERE
    2 = (
        SELECT
            COUNT(*)
        FROM
            _tags t
        WHERE
                m.model_id = t.model_id
            AND t.tag_name IN ('#jacket', '#trench')
    )

Примечание 1: Вам лучше переместить имена тегов в отдельную таблицу.Итак, 3 таблицы: модели (id, имя), теги (id, name), tags2models (tag_id, model_id)

Примечание 2: не забудьте добавить индекс (tag_name, model_id) в таблицу _tags

0 голосов
/ 22 ноября 2018

Например, вы можете использовать GROUP BY / HAVING вместе с COIST DISTINCT, чтобы найти модели, которым назначены оба тега.

SELECT m.model_id, m.name
    FROM models m
        INNER JOIN tags t
            ON m.model_id = t.model_id
    WHERE t.tag_name IN ('#jacket', '#trench')
    GROUP BY m.model_id, m.name
    HAVING COUNT(DISTINCT t.tag_name) = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...