![]() |
|
Модераторы: skyboy |
![]()
|
|
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Есть четыре таблицы:
Section Id Name Subsection Id Name Section Theme Id Name Subsection Message Id Text Theme Date Name Нужно выбрать: 1. Все Subsection.name и связанные с ними section.name, subsection.id 2. Количество theme.id и message.id 3. Наибольший message.date и из этой же записи message.name С первыми двумя я справился: SELECT section.name ‘s’, subsection.name as ‘ss’, subsection.id , count(theme.id) ‘thme’, count(message.id) ‘message’ FROM `section`,`subsection`,`theme`,`message` WHERE subsection.section=section.id and theme.subsection=subsection.id and message.theme=theme.id GROUP BY subsection.id; Но тут возникает проблема, если в данной subsection нет не одной theme, то subsection не будет в результате запроса. Я пытался исправить это с помощью left join – не получилось, вернее я делаю subsection LEFT JOIN theme, а как ещё прицепить сюда message, я не знаю. Это сообщение отредактировал(а) Secandr - 14.8.2003, 16:52 |
|||
|
||||
| Cepera |
|
|||
![]() PHPexp ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2146 Регистрация: 25.3.2002 Где: Russia, Samara Репутация: нет Всего: 7 |
не понял, извините
-------------------- I know it is heavy for reading, but I know you will read it anyway... |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Что именно?
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 59 |
Нужно использовать OUTER JOIN.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
А можно показать, как это будет выглядеть с тремя таблицами?
|
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Хочу сказать сразу, за вас код писать никто нет будет, так как люди все занятые и своей работы хватает. ЭТО ЖЕ ОСНОВЫ.
Прочитайте хотя бы для начала статью про основы SQL, думаю после этого у Вас не будут возникать подобные вопросы. Если после этого что-то не будет получаться, тогда уже поможем. -------------------- |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Если вы поймете как соединять хоты бы две таблицы, то для Вас не составит труда соединить и сотню. -------------------- |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Нашёл пример:
SELECT * FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key) WHERE b.key=d.key |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Вот что получилось:
SELECT count( DISTINCT `message`.`id`) as `msg`,count( DISTINCT `theme`.`id`) as `theme`, max(`message`.`date`) as 'date',`section`.`name` as 's', `subsection`.`name` as 'ss', `subsection`.`id` FROM section ,subsection LEFT JOIN theme ON (subsection.id=theme.subsection) LEFT JOIN message ON (theme.id=message.theme) WHERE (section.id=subsection.section) GROUP BY subsection.id ORDER BY section.pos,subsection.pos; |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
И всё равно я не пойму, как можно получить message.name для max(message.date)
Я пытался добавить FROM `message` `last`,.... и HAVING `last`.`date`=max(message.date) Но он на меня ругается |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Всё тему можно закрывать, запрос я составил
SELECT count( DISTINCT `message`.`id`) as `msg`,count( DISTINCT `theme`.`id`) as `theme`, max(`message`.`date`) as 'date', user.fio as 'user', `section`.`name` as 's', `subsection`.`name` as 'ss', `subsection`.`id` FROM section ,subsection LEFT JOIN theme ON (subsection.id=theme.subsection) LEFT JOIN message ON (theme.id=message.theme) LEFT JOIN user ON (user.id=message.who) WHERE (section.id=subsection.section) GROUP BY subsection.id ORDER BY section.pos,subsection.pos,message.date DESC; И всего за 2 недели |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Вот видишь, если постараться, то все получается. И я уверен, что пользы от этого больше, чем если тебе дали бы на блюдечке готовый ответ.
-------------------- |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 6 Всего: 39 |
Pegas, слишком рано я обрадовался. Глюк какой-то, он мне выдаёт имена от фанаря.
Что-то я не так делаю. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |