SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.07.2008 20:34:11

tma
Участник
Зарегистрирован: 07.07.2008
Сообщений: 5

Как лучше создать таблицу и написать запрос?

Есть табличка примерно такого вида:
pid - value
1 - 3
1 - 5
2 - 1
3 - 1
4 - 3
5 - 5

Нужно из этой таблички получить все pid, где value равно и 3, и 5. В примере выше это pid=1. Причём это должен быть запрос с использованием индексов. Один pid может иметь любое количество value.
Запрос "select pid from table where value=3 and value=5;" понятное дело не работает, но по смыслу нужно именно это.

Не подскажете как получить pid, имеющий сразу несколько value? Может быть таблицу как-то по-другому переделать?

Неактивен

 

#2 10.07.2008 20:48:48

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как лучше создать таблицу и написать запрос?

SELECT a.pid
FROM tbl a JOIN tbl b USING (pid)
WHERE a.value = 3 AND b.value=5.

Индексы нужны отдельно на pid и на value.

Неактивен

 

#3 10.07.2008 22:18:48

tma
Участник
Зарегистрирован: 07.07.2008
Сообщений: 5

Re: Как лучше создать таблицу и написать запрос?

Не подскажете, а если нужно больше value в запросе проверять, то запрос будет таким?
SELECT a.pid
FROM tbl a JOIN tbl b USING (pid) JOIN tbl с USING (pid) JOIN tbl d USING (pid)
WHERE a.value = 3 AND b.value=5 AND c.value=6 AND d.value=7

Неактивен

 

#4 11.07.2008 00:56:56

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Как лучше создать таблицу и написать запрос?

Простите ребяты,  но я не понял. чего вы тут, особенно зачем нужен JOIN smile

По моему сия задача решается так:


Код:

SELECT pid FROM table
WHERE value IN (3,5,7,10.......)
GROUP BY pid

разве нет?

+ составной индекс value+pid или наоборот (надо смотреть explain)


P.S.  понял. В моем варианте будет OR, а не AND

Отредактированно Shopen (11.07.2008 00:59:10)

Неактивен

 

#5 14.07.2008 20:22:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как лучше создать таблицу и написать запрос?

tma написал:

Не подскажете, а если нужно больше value в запросе проверять, то запрос будет таким?
SELECT a.pid
FROM tbl a JOIN tbl b USING (pid) JOIN tbl с USING (pid) JOIN tbl d USING (pid)
WHERE a.value = 3 AND b.value=5 AND c.value=6 AND d.value=7

Да, можно так. Тогда индекс на (pid) можно расширить на (pid,value), с ним _возможно_ будет
лучше - надо посмотреть EXPLAIN на реальных данных.

Учтите, что большое количество таблиц в JOIN будет тормозить запрос.

Неактивен

 

#6 05.08.2008 22:29:56

cvbn
Участник
Зарегистрирован: 27.07.2008
Сообщений: 7

Re: Как лучше создать таблицу и написать запрос?

У меня такая ситуация, я создал несколько таблиц. Каждая из которых отвечает за определенный параметр. Первая "страна" где только два поля ID и TITLE где ID первичный ключ. Вторая таблица-"Регион", где поля те же. Третья "Город" всё то же самое. Моя задача выводить на странице сайта в форме из трех полей эти три параметра. То есть получается так, Я выбираю Россия, второе поле обновляется без перезагрузки страницы и появляются регионы соответствующие России; соответственно третье поле обновляется уже до городов соответствующих этому региону.

Неактивен

 

#7 05.08.2008 22:30:58

cvbn
Участник
Зарегистрирован: 27.07.2008
Сообщений: 7

Re: Как лучше создать таблицу и написать запрос?

...каквозможно выйти из этой ситуации? Огромное спасибо!

Неактивен

 

#8 05.08.2008 22:48:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Как лучше создать таблицу и написать запрос?

подобный вопрос обсуждался http://sqlinfo.ru/forum/viewtopic.php?id=381

Чтобы работало без перезагрузки страницы, используйте AJAX, можете задать вопрос по AJAX на webew.ru

Неактивен

 

Board footer

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