|
|
|
|
<?php
$bcnt = db_select_one("SELECT COUNT(id_block) FROM {$gl_db_prefix}blocks");
if($bcnt <= 3)
$query = "SELECT * FROM {$gl_db_prefix}blocks ORDER BY pos";
else
$query = "SELECT * FROM {$gl_db_prefix}blocks ORDER BY RAND() LIMIT 3";
?>
|
| |
|
|
|
|
|
|
|
для: antf
(14.10.2014 в 15:15)
| | хотелось бы прокомментировать логику выборки на человеческом языке.
И еще ( id_block - это же первичный ключ таблицы?) я бы, наверное, сравнил COUNT(id_block) и COUNT(*) на предмет, что быстрее.На большой таблице, конечно. | |
|
|
|
|
|
|
|
для: antf
(14.10.2014 в 15:15)
| |
SELECT *
FROM {$gl_db_prefix}blocks
ORDER BY IF((SELECT COUNT(id_block) FROM {$gl_db_prefix}blocks) <= 3, pos, RAND())
LIMIT 3
|
| |
|
|
|
|
|
|
|
для: Igorek
(14.10.2014 в 18:18)
| | и в плане запроса тут же выскочит: Using temporary; Using filesort
Фактически - самый тяжелый вариант обработки с созданием временной таблицы и файловой сортировкой. | |
|
|
|
|
|
|
|
для: Trianon
(14.10.2014 в 22:35)
| | В общем вы правы, я просто показал, что это возможно (сортировка по условию)
Но, если и оптимизировать запрос, то начать, думаю, стоит с того, что ORDER BY RAND() конструкция по скорости сама по себе ужасна.
Сдается мне, что два отдельных запроса в данном случае будут более оптимальны | |
|
|
|