Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Можно ли обойтись одним запросом здесь? И стоит ли это делать?
 
 автор: antf   (14.10.2014 в 15:15)   письмо автору
 
 

<?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";
?>

  Ответить  
 
 автор: Trianon   (14.10.2014 в 17:51)   письмо автору
 
   для: antf   (14.10.2014 в 15:15)
 

хотелось бы прокомментировать логику выборки на человеческом языке.

И еще ( id_block - это же первичный ключ таблицы?) я бы, наверное, сравнил COUNT(id_block) и COUNT(*) на предмет, что быстрее.На большой таблице, конечно.

  Ответить  
 
 автор: Igorek   (14.10.2014 в 18:18)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Trianon   (14.10.2014 в 22:35)   письмо автору
 
   для: Igorek   (14.10.2014 в 18:18)
 

и в плане запроса тут же выскочит: Using temporary; Using filesort
Фактически - самый тяжелый вариант обработки с созданием временной таблицы и файловой сортировкой.

  Ответить  
 
 автор: Igorek   (15.10.2014 в 09:47)   письмо автору
 
   для: Trianon   (14.10.2014 в 22:35)
 

В общем вы правы, я просто показал, что это возможно (сортировка по условию)
Но, если и оптимизировать запрос, то начать, думаю, стоит с того, что ORDER BY RAND() конструкция по скорости сама по себе ужасна.

Сдается мне, что два отдельных запроса в данном случае будут более оптимальны

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования