Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Застрял с выборкой: 3 таблицы + many-to-many (Дмитрий) 08/08/2006 - 02:22:35



From: Дмитрий - 08/08/2006 - 02:22:35
Subject:Застрял с выборкой: 3 таблицы + many-to-many
-----------------
Суть вроде проста. Есть 3 таблицы: таблица номеров (rooms), таблица возрастных категорий (ages) и таблица связки номеров и возр. категорий (rooms_ages) - то есть, какие возрастные категории могут размещаться в номерах.

Таблица rooms:
room_id
name

Таблица ages (здесь age_start, age_end - возраст от и до):
age_id
age_start
age_end

И таблица связки rooms_ages:
room_id
age_id

На входе имеем массив возрастов (количество неизвестно), на пальцах пусть 16 и 25 лет.
Нужно отобрать все комнаты, которые могут принять этих двух поселенцев.

Полдня попыток приводили к каким-то запросам, но не совсем верным. На чем остановился:

SELECT r.* , COUNT(*) AS total
FROM rooms r, ages a1, ages a2, rooms_ages ra1, rooms_ages ra2

WHERE
(
r.room_id = ra1.room_id
AND ra1.age_id = a1.age_id
AND (
a1.age_start <=16
AND a1.age_end >=16
)
)

AND

(
r.room_id = ra2.room_id
AND ra2.age_id = a2.age_id
AND (
a2.age_start <=25
AND a2.age_end >=25
)
)

GROUP BY room_id

То есть кол-во таблиц (aN, raN) == количеству поселенцев.

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

Да, кстати выбрать сначала все age_id, а потом сделать что-то типа WHERE ... IN () не подходит.

Буду ОЧЕНЬ благодарен за помощь. Если нужны дампы - выложу.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
29398



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |