SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.03.2011 09:27:52

bimbim
Участник
Зарегистрирован: 26.01.2010
Сообщений: 8

(СРОЧНО)Большая проблемка с казалось бы простым по смыслу запросом

Есть табличка

id     game_id     tax_id
1     1               7
2     1               8
3     1               9
4     1              10
5     1              11
6     1              12
7     2              13
и.д.

мне надо

надо сделать выборку game_id, где (tax_id=A, tax_id=b, tax_id=c, tax_id=d) или (tax_id=B, tax_id=b, tax_id=c, tax_id=d) и т.д.
Приведу запрос который сделал и который не дает результата. Он описывает впринципи по логике то что я хочу.
SELECT game_id FROM `KidGamesCon`WHERE
(tax_id=40 AND tax_id=139 AND tax_id=20) OR (tax_id=40 AND tax_id=116 AND tax_id=20) OR (tax_id=40 AND tax_id=299 AND tax_id=20) OR (tax_id=40 AND tax_id=60 AND tax_id=20) OR (tax_id=40 AND tax_id=145 AND tax_id=20) OR (tax_id=40 AND tax_id=87 AND tax_id=20) OR (tax_id=40 AND tax_id=24 AND tax_id=20) OR (tax_id=40 AND tax_id=7 AND tax_id=20) OR (tax_id=40 AND tax_id=13 AND tax_id=20) OR (tax_id=40 AND tax_id=37 AND tax_id=20) OR (tax_id=40 AND tax_id=924 AND tax_id=20) OR (tax_id=40 AND tax_id=31 AND tax_id=20) OR (tax_id=40 AND tax_id=67464 AND tax_id=20)........

Смысл в том что есть игры. есть 6 парматеров у игр. пармаетры разные. Вот хочу по нескольким параметрам сделать поиск. (это для того чтобы не думали, а на..ера ему такой извращенский запрос).


Помогите ГУРУ. ОЧень срочно надо. мое творческое вдохновение заступорилось на данном этапе

Отредактированно bimbim (31.03.2011 09:30:23)

Неактивен

 

#2 31.03.2011 11:51:31

bimbim
Участник
Зарегистрирован: 26.01.2010
Сообщений: 8

Re: (СРОЧНО)Большая проблемка с казалось бы простым по смыслу запросом

решил поиграться с тем что знаю.. типо tax_id='12' and game_id in (select.... and game_id in(,,,,))...
написал генератор такого многоуровнего сташилища...

вот например  получается:
SELECT game_id FROM `KidGamesCon`
        WHERE (tax_id=20 and game_id in(SELECT game_id FROM `KidGamesCon` WHERE tax_id=40 and game_id in(SELECT game_id FROM `KidGamesCon` WHERE tax_id=139 OR tax_id=116 OR tax_id=299 OR tax_id=60 OR tax_id=145 OR tax_id=87 OR tax_id=24 OR tax_id=7 OR tax_id=13 OR tax_id=37 OR tax_id=924 OR tax_id=31 OR tax_id=67464))) or (tax_id=11 and game_id in(SELECT game_id FROM `KidGamesCon` WHERE tax_id=40 and game_id in(SELECT game_id FROM `KidGamesCon` WHERE tax_id=139 OR tax_id=116 OR tax_id=299 OR tax_id=60 OR tax_id=145 OR tax_id=87 OR tax_id=24 OR tax_id=7 OR tax_id=13 OR tax_id=37 OR tax_id=924 OR tax_id=31 OR tax_id=67464)))


smile это пипец.....

самое печальное другое -   "Showing rows 0 - 7 (8 total, Query took 3.4012 sec)". 3.4 секи для такой фишки... это будет печально просто при достаточном количестве посетителей.
правдо это на денвере....
НА ХОСТИНГЕ "Отображает строки 0 - 7 (8 всего, запрос занял 1.6402 сек.)"

Короче пипец sad

ГУРУ, помогите мне с этой задачкой. как можно ее решить?

Отредактированно bimbim (31.03.2011 11:55:59)

Неактивен

 

#3 31.03.2011 13:46:20

bimbim
Участник
Зарегистрирован: 26.01.2010
Сообщений: 8

Re: (СРОЧНО)Большая проблемка с казалось бы простым по смыслу запросом

на всякий слуйчай.
вопрос всего лишь заключается в том, как сделать запрос типа select * from table where FIELD1=a and FIELD1=b and FIELD1=C ...and FIELD1=N
не создавая дополнительных таблиц

Неактивен

 

#4 31.03.2011 14:28:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: (СРОЧНО)Большая проблемка с казалось бы простым по смыслу запросом

bimbim написал:

на всякий слуйчай.
вопрос всего лишь заключается в том, как сделать запрос типа select * from table where FIELD1=a and FIELD1=b and FIELD1=C ...and FIELD1=N
не создавая дополнительных таблиц

Земенит and на or ?


Что касается вашего первого сообщения:
SELECT game_id FROM `KidGamesCon`WHERE
(tax_id=40 AND tax_id=139 AND tax_id=20) OR ...
В таблице нет строчки в которой tax_id одновременно равно нескольким разным значениям wink поэтому результат выборки нулевой.
Вам нужно выбрать строки с интересующими вас tax_id сгруппировать по game_id и проверять на соответствие нужному набору tax_id, т.е.

SELECT game_id, group_concat(tax_id order by tax_id  separator ',') d FROM `KidGamesCon`WHERE tax_id=40 or tax_id=139 or tax_id=20 OR ... group by 1 having d like ('%20,40,139%') or ...

http://dev.mysql.com/doc/refman/5.5/en/ … oup-concat

Неактивен

 

#5 02.04.2011 08:19:34

bimbim
Участник
Зарегистрирован: 26.01.2010
Сообщений: 8

Re: (СРОЧНО)Большая проблемка с казалось бы простым по смыслу запросом

smile на мейл ру подсказал 1 гуру. Остальные так и не поняли что надо!

ВОт оно
SELECT
game_id
FROM
(
SELECT
game_id, tax_id
FROM
`KidGamesCon`
WHERE
tax_id IN (n1,n2...nN)
) AS b
GROUP BY game_id
HAVING count(game_id)  >= N
Это нереально крутой запрос smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson