[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как правильно составить запрос
John Cena
доброе время суток

подскажите, как правильно составить запрос в таком случае
есть таблица tags:

tag item_id
..........................
flash 3
drive 3
flash 13
drive 13
flash 8
drive 9
cpu 10
flash 1
drive 1
usb 1

мне нужно выбрать item_id, в которых есть tag равный и flash, и drive причем так что б item_id не повторялось, т.е. если смотреть на таблицу tags выше запрос должен вернуть (3,13,1)

буду благодарен если подскажите как реализовать такой запрос

п.с. полнотекстовый индекс использовать нельзя



Спустя 44 минуты, 28 секунд (20.09.2012 - 22:35) neadekvat написал(а):
Простой запрос + DISTINCT, чтобы item_id не повторялись.

Спустя 38 минут, 24 секунды (20.09.2012 - 23:13) John Cena написал(а):
нет. это я знаю. сейчас мой запрос в скрипте выглядит так:


'select distinct item_id from item_tag where tag like "flash%" or tag like "drive%" limit 0, 5'


в итоге, исходя из той таблицы, которую я привел выше, этот запрос мне выведет:
3,13,8,9,1
но поля с item_id = 8 и item_id = 9 имеют теги только либо flash либо drive, а мне необходимо выбрать только те поля, в которых tag будет и flash и drive...

Спустя 16 минут, 29 секунд (20.09.2012 - 23:30) neadekvat написал(а):
Возможно, что-то такое:
SELECT `item_id`
FROM `tags`
WHERE `tag` IN ('flash', 'drive')
GROUP BY `item_id`
HAVING COUNT(*) = 2

Спустя 10 часов, 31 минута, 7 секунд (21.09.2012 - 10:01) SlavaFr написал(а):
не тестировал, но наверное так должно сработать
select distinct t1.item_id from tags as t1 innner join tags as t2
on t1.item_id=t2.item_id and t1.`tag` ='flash' and t2.`tag` = 'drive'

Спустя 6 минут, 24 секунды (21.09.2012 - 10:07) Игорь_Vasinsky написал(а):
у неадеквата как то адекватней читается запрос то)

Спустя 10 минут, 14 секунд (21.09.2012 - 10:17) neadekvat написал(а):
SlavaFr, а если добавиться хотя бы еще один аргумент? Количество join'ов будет расти линейно, я так понимаю. Кроме того, накладывать ограничения на строки следует в WHERE, а не в ON.

Игорь_Vasinsky
biggrin.gif Работаю на диссонансе.

Спустя 3 минуты, 37 секунд (21.09.2012 - 10:21) Игорь_Vasinsky написал(а):
я сначала хотел использовать "прозрачней" но решил поменять - для курьёзности случая)

Спустя 4 часа, 34 минуты, 58 секунд (21.09.2012 - 14:56) SlavaFr написал(а):
Цитата (neadekvat @ 21.09.2012 - 07:17)
а если добавиться хотя бы еще один аргумент? Количество join'ов будет расти линейно

Согласен

Цитата (neadekvat @ 21.09.2012 - 07:17)
Кроме того, накладывать ограничения на строки следует в WHERE, а не в ON.

Согласен,
но в данном случае я действительно хотел указать, что это не ограничение а условие соединения таблиц.

Спустя 1 час, 2 минуты, 28 секунд (21.09.2012 - 15:58) neadekvat написал(а):
Цитата (SlavaFr @ 21.09.2012 - 15:56)
но в данном случае я действительно хотел указать, что это не ограничение а условие соединения таблиц.

Нет, ты кое-чего не понимаешь.
"флэш" и "драйвер" - это уже переменные аргументы, которые накладывают ограничения на строку, а не соединяют таблицы, поэтому они должны быть в WHERE и нигде более.

Спустя 9 часов, 23 минуты, 46 секунд (22.09.2012 - 01:22) John Cena написал(а):
только что попробовал оба запрос, не один не прошел как надо...

вообще я так подумал, что нужно что-то ровно противоположное для distinct...

есть ли такое?

и если есть, то в общем-то дальше можно попробовать уже скриптом почистить...

просто очень важно что бы нормально работало с limit x, y, что б не получилось что на двух страницах выпадают одинаковые товары...

вообще я думаю может переделать эту таблицу? но не знаю, какой будет самая оптимальная структура, для такого поиска...

ну и не в коем случае поиск не должен осуществляться по полнотекстовому поиску...

Спустя 13 минут, 2 секунды (22.09.2012 - 01:35) neadekvat написал(а):
John Cena, не поленился, создал таблицу и проверил - выдало именно те item_id, которые ты сам привел в первом посте:

Свернутый текст
Данные:
user posted image

Выборка:
user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.