Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Имеется
- таблица images (id, name) содержащая изображения
- таблица tags (id, name) содержащая метки
- таблица, которая представляет связь многие ко многим tagimages (id, idimage, idtag)
Вопрос: если даны id-шники меток, как с помощью одного запроса вытянуть определенные id из таблицы images отвечающие условиям заданным в виде логических операций. Например, найти id.images у которых ((id.tags=1) and (id.tags=2) or (id.tags=6) and (id.tags=8)). Если возможна такая операция через один запрос, то подскажите как его построить? или не наворачивать и сделать через два запроса: первый ищет по условию OR, второй из результата первого запроса выбирает только значения отвечающие условиям AND.
И пример из реальной задачи, поиск всех изображений за 2016 год за январь и февраль месяц. Условие (tags='2016' AND tags='январь') OR (tags='2016' AND tags='февраль').
Неактивен
Неактивен
id поле в tagimages просто ключевое поле. По сути без надобности, а что можно вот так просто без него?
Неактивен
в mysql нет такого ключевого слова - id
судя по тому что у вас написано id это колонка, имхо, абсолютно не нужная, т.к. комбинация idimage, idtag является уникальной
что показывает
show create table tagimages;
Неактивен
Что-то не работает запрос как надо - выдает нулевой результат. Можно однако сократить запрос так как я знаю id-шники тагов.
select i.id, i.link from images i join tagimage ti on i.id=ti.idimage where (ti.idtag=7/*2016*/) and (ti.idtag=8/*февраль*/)
Можно было бы сделать через ... in (". $tags. ") group by i.id having count(t.id)=" . count($arraytags)..., но логические операции будут более сложные чем просто либо AND, либо OR. Т.е. будет некая мешанина операций.
Отредактированно Deniskh73 (19.04.2016 15:44:35)
Неактивен
да, согласен, глупость написал, там нужна группировка
насчет можно ли через один запрос - зависит от того какие более сложные операции там будут
Неактивен
Страниц: 1