| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Как правильно сделать запрос |
| Автор: Viroman 22.10.2008, 22:43 |
| И так таблица znakomie person | kachestwo ------------------- wowa | nehoroshij kostik | srednij andrej | otlichnij misha | srednij wowa | otlichnij jura | luchshij misha | nehoroshij jura | otlichnij В общем не обращайте внимание на название, а на суть, нужно подать ту person, где имеются одновременно два состояния, к примеру, where kachestwo='luchshij' and 'kachestwo=otlichnij', но так, чтобы эти два указанных состояния присутствовали в обязательном порядке, то есть те персоны, где только одно из этих качеств или вовсе никаких из указанных, чтобы не появлялись. То есть если даже одна и та же персона имеет качество otlichnij, но не имеет luchshij, или же имеет luchshij, но не имеет otlichnij, чтобы те также не рассматривались, помогите пожалуйста! В моём примере по сути только jura имеет оба качества одновременно, по сути другие должны отфильтроваться, вот как это правильно теперь сделать? Как правильно сформировать sql запрос? |
| Автор: Kesh 22.10.2008, 23:35 | ||
|
| Автор: skyboy 22.10.2008, 23:40 | ||||
если человек может иметь одно и то же "качество" более одного раза, то надо в count добавить distinct:
иначе
вернет и wowa тоже. |
| Автор: Kesh 23.10.2008, 00:21 |
| skyboy, точно... Запросы пишутся на коленке... |
| Автор: Viroman 23.10.2008, 11:48 | ||
Спасибо Вам обоим за помощь, но указанный вариант мне не совсем подходит, точнее, мне желательно, чтобы он выдавал из таблицы всё *, но не просто всё, а сразу бы подавал оба варианта, типа
Хочу, чтобы он выдал всё и не просто так, а как в моём примере обе строчки, типа Array ( [person] => jura [kachestwo] => luchshij ) Array ( [person] => jura [kachestwo] => otlichnij ) |
| Автор: Viroman 23.10.2008, 16:22 |
| Чувствую, это нерешимая проблема силами скл ибо мне необходимо, чтобы выдавались все значения, для которого изначально несколько условий выполнились. При том это должно происходить без группировки, то бишь, чтобы персон выдвалась столько раз, сколько та присутствует в таблице, раз для неё условия выполнились. Мне нужна нека постфильтрация. Сколько бы не спрашивал, с этой задачей не могут справиться даже заядлые эксперты :( хотя мне уже и inner join на одну и ту же таблицу предложили.. |
| Автор: Akina 23.10.2008, 17:16 | ||||||||
| Да ладно, нашел проблему... Поехали. Первый запрос - тупо убираем дубли, и отбираем нужные качества.
Второй запрос - считаем количество вхождений, и отбираем те, что имеют требуемое количество вхождений.
Осталось собрать всё в один запрос
PS. Это если я правильно понял условие - требуется вывести ВСЕ записи про всех знакомых, у кого хотя бы по разу встречается и 'luchshij', и 'otlichnij', вне зависимости от наличия других характеристик. Или так - требуется отфильтровать все записи про тех знакомых, у которых отсутствует хотя бы одно из указанных качеств. |