Доброго времени суток.
Сижу над запросом и уже походу мозг начинает тупить.
Есть две таблицы — таблица `p` со статьями и `pt` с метками. К каждой статье идет много меток в таблице `pt` связаны они по ключу `id_p` в каждой таблице.
Таблци `p`:
SELECT * FROM `p`<br/>
Результат:
id_p | p_title<br/>
________________<br/>
1 | статья 1<br/>
2 | статья 2<br/>
3 | статья 3<br/>
4 | статья 4<br/>
.....<br/>
262 | статья 262<br/>
Таблица `pt:
SELECT * FROM `pt` WHERE `id_p` = 262<br/>
Результат:
id_pt | id_p | pt_val<br/>
_______________<br/>
7403 | 262 | 556<br/>
7402 | 262 | 535<br/>
7401 | 262 | 4448<br/>
7400 | 262 | 4447<br/>
7399 | 262 | 4445<br/>
Вопрос. Как записать условие WHERE что бы при выборе с таблицы `p` выбирались все записи с метками 4447 и 4448, но не с 556 и 535?
Я делаю:
SELECT * FROM `p`<br/>
INNER JOIN `pt`<br/>
WHERE `id_p` = 262 AND `pt_val` = 4447 AND `pt_val` = 4448<br/>
Результата ноль строк. Но если делать через OR то получается две записи с соответствующими метками:
SELECT * FROM `p`<br/>
INNER JOIN `pt`<br/>
WHERE `id_p` = 262 AND (`pt_val` = 4447 OR `pt_val` = 4448)<br/>
Нужно получить один. Но при большом количестве записей в таблице `p` и меток в `pt` в результат попадают записи с `p` которые там не должно быть