Автор Тема: два запроса в одном (для чата)  (Прочитано 3066 раз)

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

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
два запроса в одном (для чата)
« : 26 Апреля 2003, 16:46:20 »
Пишу чат, и как бы все хорошо но хотелось бы улучшить кое что, а именно:

есть два запроса:

первый для общего окна:

SELECT * FROM c_chat  where hiddenbody = \'1\' ORDER BY id DESC LIMIT 70


второй для приватного окна:

SELECT * FROM c_chat  where (name = \'$uid\' AND hiddenbody = \'2\') OR  (fromnick = \'$uid\' AND hiddenbody = \'2\') ORDER BY id DESC LIMIT 70

__________

хотелось бы улучшить первый запрос до такого состояния чтоб когда в приват приходило сообщение в общее окно вываливала эта последняя строка из привата.

мне один знаток SQL помог написать чтото такое:

SELECT c_chat.* FROM c_chat INNER JOIN (SELECT max(id) temp_id FROM c_chat WHERE (name = \'$uid\' AND hiddenbody = \'2\') OR  (fromnick = \'$uid\' AND hiddenbody = \'2\'))  temp ON c_chat.Id = temp.temp_Id UNION ALL  SELECT c_chat.* FROM c_chat  WHERE hiddenbody = \'1\'

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

Помогите написать запрос.

Спасибо.
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн Stas

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 304
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.isfuture.com
два запроса в одном (для чата)
« Ответ #1 : 27 Апреля 2003, 15:07:55 »
начнем с того, что у тебя твой
Цитировать
tarya:
чудовищьный запрос

работать скорее всего не будет, так как у тебя в нем вложенные запросы + UNION. UNION работать не будет если у тебя нет MySQL 4.0. Вложенные запросы, если у тебя нет MySQL 4.1
(ето конечно если ты MySQL пользуешься ;) )
Ну а для запроса.. Объясни по подробнее как тебе именно нужно чтобы работало.

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
два запроса в одном (для чата)
« Ответ #2 : 28 Апреля 2003, 16:33:29 »
обьясняю подробнее:


есть чат, я его делаю.

и вот получается что люди болтают, пишут в общее окно, и запрос:
SELECT * FROM c_chat where hiddenbody = \'1\' ORDER BY id DESC LIMIT 70

вытаскивает из таблицы эти общие месаги

А еще есть приват. В приват заходят посредством переключателя общее/приват , приват таже страница, просто запрос другой и выводит он личные сообщения:
SELECT * FROM c_chat where (name = \'$uid\' AND hiddenbody = \'2\') OR (fromnick = \'$uid\' AND hiddenbody = \'2\') ORDER BY id DESC LIMIT 70

и вот получается что когда человек просматривает общее окно, он не видит - пришло ли ему месага в приват или нет и это не есть хорошо.

вот я видел на одном чате такую фичу, ты болтаешь в общем, и когда пришло месага в приват то она выводится вместе с общими всеми месагами, ну только выделено трошки.

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

спасибо
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
два запроса в одном (для чата)
« Ответ #3 : 29 Апреля 2003, 08:41:32 »
CREATE TEMPORARY TABLE tmp SELECT * FROM c_chat where hiddenbody = \'1\' LIMIT 70;
INSERT tmp SELECT * FROM c_chat where (name = \'$uid\' AND hiddenbody = \'2\') OR (fromnick = \'$uid\' AND hiddenbody = \'2\') LIMIT 70;
SELECT * FROM tmp ORDER BY id DESC;
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
два запроса в одном (для чата)
« Ответ #4 : 29 Апреля 2003, 11:36:22 »
Цитировать
Alexandr:
Alexandr
Фанат форума


Если можно для меня ламера в ЭсКюЭль в псевдокоде если возможно, а то ничего не понятно....

"Создается Темп таблица tmp в нее помещяется SELECT * FROM c_chat where hiddenbody = \'1\' LIMIT 70, плюс к ней добавляется
tmp SELECT * FROM c_chat where (name = \'$uid\' AND hiddenbody = \'2\') OR (fromnick = \'$uid\' AND hiddenbody = \'2\') LIMIT 1;

и делается общий запрос из tmp таблицы

думаю все правильно понял, буду пробовать

спасибо большое
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

 

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