2016-12-09 4 views
0

у меня есть эта установка базы данных:Mysql Многие-ко-многим (и где) выберите

  • продукты

    • ID
    • [полей ...]
  • теги

    • ID
    • [fields ...]
  • product_tag

    • ID
    • PRODUCT_ID
    • tag_id

Если есть эта записи в моей базе данных

  • Продукты
    • продукта A [ID: 1]
    • Продукт B [ID: 2]
    • Продукт C [ID: 3]

  • Теги
    • тег [ID: 1]
    • Метка B [ID: 2]
    • Метка С [ID: 3]

  • Produc_Tag
    • [product_id : 1, tag_id: 1]
    • [product_id: 1, tag_id: 2]
    • [product_id: 2, tag_id: 1]
    • [product_id: 2, tag_id: 3]
    • [product_id: 3, tag_id: 1]
    • [product_id: 3, tag_id: 2]

Как я запрос, чтобы получить продукты, которые tag_id 1 и 2 (он должен продуктами с tag_id 1 и 2) в этом примере: «Продукт A» и «Продукт C»

+0

Что такое EAV об этом? –

ответ

0

Используйте этот

SELECT P.id 
FROM products P 
INNER JOIN products_tags PT ON PT.product_id = P.id 
WHERE PT.tag_id IN (1,2) 
GROUP BY P.id 
HAVING COUNT(PT.*) = 2 
+0

@Neto [предложил изменить] (http://stackoverflow.com/review/spected-edits/14572767) на ваш ответ, который был отклонен рецензентами. Возможно, вы захотите улучшить его самостоятельно. –

+0

Я получил неправильное имя таблицы, но я думаю, что OP должен изменить имя его таблицы. Выглядит более правильно. – CptMisery

+0

Знаете ли вы, что «MariaDB не принимает сообщение« COUNT (PT. *) »? –

0
SELECT * 
FROM products 
WHERE id IN (
    SELECT product_id 
    FROM product_tag 
    GROUP BY product_id 
    HAVING GROUP_CONCAT(tag_id) = '1,2' 
) 
+0

hmm ... Это может быть лучше, чем у меня – CptMisery

+0

Я не знаю, будет ли порядок идентификаторов тегов ''1,2''. – cpburnz

 Смежные вопросы

  • Нет связанных вопросов^_^