Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить запрос на MySQL 
:(
    Опции темы
Secandr
  Дата 14.8.2003, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 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


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Cepera
Дата 14.8.2003, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHPexp
****


Профиль
Группа: Экс. модератор
Сообщений: 2146
Регистрация: 25.3.2002
Где: Russia, Samara

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



не понял, извините


--------------------
I know it is heavy for reading, but I know you will read it anyway...
PM MAIL WWW ICQ   Вверх
Secandr
Дата 14.8.2003, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Что именно?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Vyacheslav
Дата 15.8.2003, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

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



Нужно использовать OUTER JOIN.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Secandr
Дата 15.8.2003, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



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


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Medved
Дата 17.8.2003, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Хочу сказать сразу, за вас код писать никто нет будет, так как люди все занятые и своей работы хватает. ЭТО ЖЕ ОСНОВЫ.

Прочитайте хотя бы для начала статью про основы SQL, думаю после этого у Вас не будут возникать подобные вопросы. Если после этого что-то не будет получаться, тогда уже поможем.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Medved
Дата 17.8.2003, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Цитата(Secandr @ 15.8.2003, 22:32)
А можно показать, как это будет выглядеть с тремя таблицами?

Если вы поймете как соединять хоты бы две таблицы, то для Вас не составит труда соединить и сотню.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Secandr
Дата 17.8.2003, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 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


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Secandr
Дата 19.8.2003, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 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;


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Secandr
Дата 19.8.2003, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



И всё равно я не пойму, как можно получить message.name для max(message.date)

Я пытался добавить FROM `message` `last`,....
и HAVING `last`.`date`=max(message.date)

Но он на меня ругается sad.gif


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Secandr
Дата 20.8.2003, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Всё тему можно закрывать, запрос я составил smile.gif
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 недели smile.gif


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Medved
Дата 20.8.2003, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Вот видишь, если постараться, то все получается. И я уверен, что пользы от этого больше, чем если тебе дали бы на блюдечке готовый ответ.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Secandr
Дата 21.8.2003, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Pegas, слишком рано я обрадовался. Глюк какой-то, он мне выдаёт имена от фанаря.

Что-то я не так делаю.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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