Общие > Базы данных

два запроса в одном (для чата)

(1/1)

tarya:
Пишу чат, и как бы все хорошо но хотелось бы улучшить кое что, а именно:

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

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

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:
начнем с того, что у тебя твой
--- Цитировать ---tarya:
чудовищьный запрос
--- Конец цитаты ---

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

tarya:
обьясняю подробнее:


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

и вот получается что люди болтают, пишут в общее окно, и запрос:
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:
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;

tarya:

--- Цитировать ---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 таблицы

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

спасибо большое

Навигация

[0] Главная страница сообщений

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 
Перейти к полной версии