[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединить в 1 запрос.
715kg
Данный код ниже делает 2 запроса к базе данных


$id = dbquery("SELECT COUNT(*) FROM amx_commentaries");
$id_c = dbresult($id , 0);
$random = rand(0, $id_c);
$get_comments = mysql_query("SELECT id, server_id, username, text, date, type FROM amx_commentaries WHERE type!='0' LIMIT $random, 1");


Как можно объединить в 1 запрос?
glock18
Цитата (715kg @ 16.05.2013 - 13:39)
Данный код ниже делает 2 запроса к базе данных


$id = dbquery("SELECT COUNT(*) FROM amx_commentaries");
$id_c = dbresult($id , 0);
$random = rand(0, $id_c);
$get_comments = mysql_query("SELECT id, server_id, username, text, date, type FROM amx_commentaries WHERE type!='0' LIMIT $random, 1");


Как можно объединить в 1 запрос?

а оно вам надо? если "вот вапще 1 запрос надо", то order by rand() вам в помощь, но, поверьте, куда лучше обойтись без него, а значит:
- обойтись двумя запросами
или
- результат первого запроса запоминать/кешировать/предполагать без собс-но запроса

Плюс order by rand() в том, что он даст действительно рандомные записи, но индексы отдыхают, так что на большой таблице применение неприемлемо.
715kg
В том то и дело, таблица огромная. Куча комментариев.
Поэтому, лучше обойтись 2мя запросами. Иначе грузить будет ужас.
Но меня все еще интересует как можно объединить в один?
glock18
Цитата (715kg @ 16.05.2013 - 14:23)
В том то и дело, таблица огромная. Куча комментариев.
Поэтому, лучше обойтись 2мя запросами. Иначе грузить будет ужас.
Но меня все еще интересует как можно объединить в один?

а я разве не озвучил? ;) Ну, если наглядно надо, то

SELECT id, server_id, username, text, date, type FROM amx_commentaries WHERE type!='0' ORDER BY RAND() LIMIT 1


но order by rand() вообще не рекомендуется использовать на таблицах с хоть сколько-то значимым числом записей.

Касательно двух запросов: если вы myisam используете, то "SELECT COUNT(*) FROM amx_commentaries" отрабатывает мгновенно, поскольку число рядов хранится в инфе о таблице, и соответственно такой запрос не требует пересчета записей от mysql. Но даже если с пересчетом, order by rand() заметно проиграет паре запросов
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.