







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
29398
|
|