| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Подкскажите как сделать запрос |
| Автор: Рыжий 11.5.2009, 12:30 |
| Здравствуйте! Никак не могу прийти к решению: Есть такая таблица: +---+---------+------+ | id | field | item | +---+---------+------+ | 0 | one | 1 | | 1 | two | 2 | | 2 | two | 1 | | 3 | one | 3 | +__+_____+____+ id - auto_increment, primary_key field - поле varchar, которое может принимать разные значения (допустим это one, two, three...) item - через это поле есть связь с другими таблицами, это как itemid Вопрос: Как мне выбрать только те item, у которых field есть one и two (то есть те, что выделены синим), если только один one - не подходит, если только один two - тоже. Нужно, чтобы одновременно one и two. Я уже совсем запутался... вроде как при одном SELECT запрос обрабатывает только одну строку и сравнивать с предыдущими результатами не может. Думал насчет GROUP BY, но так и не удалось его применить нормально. Что подскажите? |
| Автор: skyboy 11.5.2009, 15:35 | ||||
или(не проверено)
|
| Автор: Рыжий 11.5.2009, 19:28 |
| skyboy, Жаль только, что нагрузку на сервер прибавляет значительно. Кроме 'one', 'two' может быть еще 20 других вариантов и собственно этот код еще вклинивается в запрос с LEFT JOIN`ами и WHERE. Да и в БД 140 000 записей и без того, - огого :( Но код классный, позабыл я об INNER JOIN |
| Автор: primesite 19.5.2009, 23:19 |
| Как вариант (не проверено): SELECT item, COUNT(DISTINCT field) as unique_count FROM table GROUP BY item HAVING unique_count > 1; |
| Автор: Akina 20.5.2009, 07:58 | ||
Нормальный вариант - при условии что все возможные варианты field должны быть в наличии (есссно заменить >1 на =N, где N - количество вариантов). Если же нужно отобрать определённый набор из возможных вариантов, то добавляется ещё условие отбора, типа (даю для трёх требуемых из более чем трёх возможных)
|