Сценарий довольно прост: у меня есть содержимое в таблице A и теги для содержимого в таблице B:
Table A:
+----+-------+-...
| id | title | ...
+----+-------+-...
Table B:
+------+-----+
| id_A | tag |
+------+-----+
Я хочу выбрать все строки содержимого в A, которые имеют тег 'foo':
SELECT A.* FROM A, B WHERE A.id = B.id_A AND B.tag = 'foo'
Пока все просто.
Моя проблема заключается в следующем: как выбрать строки содержимого, которые имеют и тег 'foo' и тег 'бар'?В частности, как я могу выбрать строки, которые имеют n
теги 'foo', 'bar', ... для произвольно n > 1
?
Решением было бы присоединиться к B n
раз, но это плохо, и я предполагаю, что это не очень эффективно.
Поскольку я использую MySQL, PHP и PDO с подготовленными выражениями, если есть решение, которое обходится без необходимой конкатенации строк (например,в решении «Join n
times» в части PHP, это было бы моим любимым.