Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите плиз с sql запросом выборки по 3 таблицам 
:(
    Опции темы
PROme2
Дата 23.2.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



блин, бывает же так, делаешь-делаешь, потом бац, и на какой-то примитивной проблеме как зациклишься... smile

в общем дело такое:

есть три таблицы, последовательно связанные идентификаторами, выглядит это примерно так:

table1 | id0 - id1
table2 | id1 - id2
table3 | id2 - dat

у нас имеется id0, по нему нам надо из первой таблицы выбрать все значения id1, потом по всем соотв. значениям id1 выбрать все id2 из второй таблицы и затем по всем полученным id2 произвести выборку данных из третьей таблицы

и все это нужно сделать одним запросом
изменение структуры базы данных даже обговариваться не может

ну вот тут я что-то и застрял на этой ерунде
значит с выбором всех id2 из таблицы 2, которые соответствуют всем id1 из таблицы 1, которые в свою очередь соответсвуют id0 smile проблем вроде не было:

Код

SELECT t2.id2
FROM `table1` AS t1
INNER JOIN `table2` AS t2 ON t2.id1=t1.id1
WHERE t1.id0='$id0'


а вот когда я подключил третюю таблицу начались чудеса smile
сделал я это так (криво?):

Код

SELECT t3.id2, t3.dat
FROM `table1` AS t1
INNER JOIN `table2` AS t2 ON t2.id1=t1.id1
INNER JOIN `table3` AS t3 ON t3.id2=t2.id2
WHERE t1.id0='$id0'


в общем работает этот запрос криво как-то... но что-то там таки работает: если в первый вариант указать некоторый $id0, он выдает, например, 200 соотв. значений id2, а вот если тот же $id0 указать во втором варианте запроса, он выдаст то же количество (например, 200) id2, но все они будут одинаковыми, т.е., путь первый запрос выдал 200 значений id2: 56 67 68 69... 105343, то второй запрос будет выдавать id2 из table3 в том же количестве (например, 200), но все они будут одинаковыми - первыми, т.е. 56 56 56 56 56 ... 56 и соотв. данные из таблицы3 будут выбираться только с id2=56... smile

надеюсь, доступно объяснил
нид нелп smile
PM MAIL   Вверх
Illuminaty
Дата 23.2.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



а так не получится?
Код

SELECT t3.dat FROM `table1` t1, `table2` t2, `table3`t3
WHERE t3.id2 = t2.id2 AND t2.id1 = t1.id1 AND t1.id0 = '$id0'

PM MAIL ICQ   Вверх
PROme2
Дата 23.2.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



smile ээээ smile
Illuminaty результат 1-в-1
у меня уже начали зарождаться всякие нехорошие мысли... smile smile
Добавлено @ 22:51
спасибо за помощь, разобрался smile
структура бд была несколько сложней, там идет 30 таблиц связанных по трое (в графическом представлении что-то типа ДНК smile ) так что и id по три пары на уровень, ну это не важно, просто чтобы сразы вас не нагружать...
в общем разобрался, я просто немного перепутал направление движения, все работает
Illuminaty, отдельный сенкс smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.