![]() |
|
Модераторы: skyboy |
![]()
|
|
| ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: 1 Всего: 58 |
Есть Таблица1, в одном из полей которой (Поле2) находятся уникальные значения (строки). Есть Таблица2, Таблица3 и Таблица4, состоящие каждая из двух полей, первое из которых - ID, второе - строка (все значения уникальные). Есть Таблица5, связыващая три последних с первой, в которой хранятся только ID соответствующих значений. Каждая ее запись выглядит примерно так:
| ID5 | ID1 | ID2 | ID3 | ID4 | Где столбец ID1 содержит уникальные значения, столбцы ID2, ID3, ID4 могут содержать повторяющиеся значения. Требуется составить запрос, который бы получал из переменных (var2, var3, var4) значения ID2, ID3, ID4, по ним находил в Таблице5 соответствующие значения ID1 и выводил на экран примерно следующее: Табл1.Поле2 | Табл1. ... | Табл2.Поле2 | Табл3.Поле2 | Табл4.Поле2 | Причем если одна из переменных - пустая строка (""), то это означает, что нужно найти все значения соответствующего ID. Если все переменные равны "", то на экране должно появиться столько строк, сколько записей в Таблице5. |
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Я не знаю MySql, поэтому встречный вопрос тебе одним запросом это надо или можно через временные таблицы (если они есть в MySQL)
|
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Можно попробовать так:
Переменные ты передаешь из программы и соответственно можешь проанализировать их и если они у тебя пустые поставь '*' (для условия LIKE) Select поля... from 1,2,3,4,5 where 1.id1 in (select 5.id1 from 5 where id2 LIKE var2 and id3 LIKE var3 and id4 LIKE var4) and 1.id1=5.id1 and 2.id2=5.id2 and 3.id3=5.id3 and 4.id4=5.id4 Это на скорую руку, много не думая. Наверняка можно получше придумать, времени нет, но такой запрос очень долго будет работать. Если можно то лучше через временные таблицы написать, гораздо быстрей будет работать. Если есть временные таблицы могу написать и через временные таблицы. Оптимизировать запрос уже сам будешь !!! |
|||
|
||||
| ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: 1 Всего: 58 |
Я не знаю, что такое временные таблицы, и не хочу с ними ковыряться. Знаю, что можно сделать одним запросом, но конкретно в данном случае как, пока не дошло.
|
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Ну а то, что я тебе предложил тебе не годиться ?
|
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
ida Пользуйся join
SELECT что-то FROM t1 LEFTJOIN t5 ON t1.pole2=t5.id1 LEFTJOIN t2 ON t2.pole1=t5.id2 и т.д. и т.п. Добавлено @ 09:32 над всеми темами есть топик с помощью по БД, прочти его, там много интересного в том числе и про JOIN |
|||
|
||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
2 jonik_Dk в MySQL, к сожалению, пока нет вложенных селектов...
|
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Sorry, я не знал
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |