Forum Webscript.Ru
Общие => Базы данных => Тема начата: tarya от 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\'
но оно чтото глючит немыслимо, тоесть не работает совсем, а вот подправить я такой чудовищьный запрос пока не в состоянии, силенок маловато.
Помогите написать запрос.
Спасибо.
-
начнем с того, что у тебя твой
tarya:
чудовищьный запрос
работать скорее всего не будет, так как у тебя в нем вложенные запросы + UNION. UNION работать не будет если у тебя нет MySQL 4.0. Вложенные запросы, если у тебя нет MySQL 4.1
(ето конечно если ты MySQL пользуешься ;) )
Ну а для запроса.. Объясни по подробнее как тебе именно нужно чтобы работало.
-
обьясняю подробнее:
есть чат, я его делаю.
и вот получается что люди болтают, пишут в общее окно, и запрос:
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
и вот получается что когда человек просматривает общее окно, он не видит - пришло ли ему месага в приват или нет и это не есть хорошо.
вот я видел на одном чате такую фичу, ты болтаешь в общем, и когда пришло месага в приват то она выводится вместе с общими всеми месагами, ну только выделено трошки.
так вот бы написать такой запрос..... чтоб он и показывал общие месаги и при появлении месаги в приват - она последняя показывалась в общем и именно конечноже тому человеку которому адресовано.
спасибо
-
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;
-
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 таблицы
думаю все правильно понял, буду пробовать
спасибо большое