Автор Тема: Сложный запрос  (Прочитано 3702 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Сложный запрос
« : 30 Ноября 2004, 21:20:02 »
Для начала опишу ситуацию: Форум, две таблицы из него :-)
таблица forum с полями id_forum title last_post
таблица post c полями id_forum id_post text name date

можно ли сделать такой запрос, чтобы бд выдала результат в обратной последовательности по дате последнего поста определенного форума ( т.е. форум в который был добавлен последний пост, становиться первым и т.д.)

я пока ничего лучшего не нашел (точнее пока с запросами сложными не разобрался, вот на примерах пробую...) как
при каждом добавлении в форум нового поста, добавляем в таблицу forum новую колонку last_post куды вставляется дата последнего поста
и делаем вот такой запрос
select * from forum order by last_post desc

А можно как-нить без поля last_post?
« Последнее редактирование: 30 Ноября 2004, 22:56:22 от Rodent »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Сложный запрос
« Ответ #1 : 30 Ноября 2004, 22:00:13 »
Rodent
потрудись написать свой вопрос более внимательно.
Например ты перечислил таблицы forum / post но в примере запроса импользуешь таблицу topic
Нужны - четкая структура таблица, перечень полей, которые надо получить запросом, ограничения запроса, дополнительная информация (на твое усмотрение)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Сложный запрос
« Ответ #2 : 30 Ноября 2004, 22:06:56 »
Сделано

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Сложный запрос
« Ответ #3 : 30 Ноября 2004, 22:42:43 »
попробуй

SELECT f. * , MAX( p.date ) AS last_post
FROM forum f
INNER JOIN post p ON p.id_forum = f.id_forum
GROUP BY p.id_forum
ORDER BY last_post DESC  
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Сложный запрос
« Ответ #4 : 30 Ноября 2004, 22:55:13 »
Макс
вы наверное меня не поняли, хотя сам виноват... так все расписывать....
структура таблиц отсается неизменной
таблица forum с полями id_forum title last_post
таблица post c полями id_forum id_post text name date
вывожу форумы в обратной последовательности отсортировав по последнему посту в данном форуме
как я это делаю.
создал доп поле в таблице forum то самое last_post в котором информация обновляется при добавлении очередного поста
и при выборке используется вот такой запрос
select * from forum order by last_post desc
можно ли создать такой запрос чтобы не использовать поле last_post и таким образом удалить его вообще
зачем хранить инфо о посл посте если можно ее спокойно найти отсортировав по дате и номеру форума сами посты. но вот как это сделать одним запросом?

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Сложный запрос
« Ответ #5 : 30 Ноября 2004, 22:56:02 »
И еще маленький вопросик по той же теме:
таблица post с полями id_forum id_post text name user_id date
таблица user с полями id_user login city

При выборке допустим 10 последних постов, через цикл for я каждый раз если user_id!=0 (значит не гость) использую запрос к таблице user что узнать данные о данном пользователе.
Мне так и продолжать таким образом выяснять данные или можно с помощью сложного запроса, и стоит ли это делать?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Сложный запрос
« Ответ #6 : 30 Ноября 2004, 23:09:00 »
1. Мой запрос не использует поле last_post. В строке
MAX( p.date ) AS last_post
last_post - это не поле, а псевдоним для значения  MAX(p.date)

Хотя на твоей таблице это действительно не сработает, так как сейчас у тебя там есть поле с именем last_post.
Попробуй :
SELECT f. * , MAX( p.date ) AS my_last_post
FROM forum f
INNER JOIN post p ON p.id_forum = f.id_forum
GROUP BY p.id_forum
ORDER BY my_last_post DESC


2. По поводу юзеров :

SELECT f. * , MAX( p.date ) AS last_post, u.*
FROM forum f
INNER JOIN post p ON p.id_forum = f.id_forum
LEFT JOIN user u ON u.id_user = p.user_id
GROUP BY p.id_forum
ORDER BY last_post DESC
вроде так
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Сложный запрос
« Ответ #7 : 30 Ноября 2004, 23:26:39 »
Макс
Огромное спасибо.
С форумами дело пошло, а вот с юзерами придеться покопаться...
Щас я немного прокручу в голове что получается...
и если так и не разберусь обязательно задам еще вопросы :-)

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Сложный запрос
« Ответ #8 : 30 Ноября 2004, 23:34:52 »
Так\'c тут маленький вопросик возник по правильности написания запросов
Например, из запроса мне нужно вытащить допустим 3 переменных, хотя в самой таблице около 15 колонок, мне ставить * или все таки те которые мне нужны? А если их будет 5-6? или 2-3 таблице по 10-15 колонок, а мне из каждой только по 2-3 переменных?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Сложный запрос
« Ответ #9 : 30 Ноября 2004, 23:52:11 »
Я действую примерно по такому принципу :
если реально надо менее 50% - 75% полей (точное число зависит от моей лени в данный момент времени) то перечисляю поля руками.
Исключением являются случаи, если в таблице есть большие поля (TEXT, BLOB) значения которых мне не нужны - тогда тоже ручками перечисляю поля.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28