Продолжая тему выборки произвольных записей в MySQL

12 Дек
2011

Хочу предложить альтернативное решение выборки произвольных записей из таблицы с помощью связки PHP + MySQL.

Допустим, имеется таблица goods следующей структуры:
image
CREATE TABLE  `goods` (
  `productID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `number` varchar(13) DEFAULT NULL
  PRIMARY KEY (`productID`)
)
Необходимо выбрать выборочно 3 записи.

Идея
Использовать в запросе оператор IN и сформировать для него значения на PHP.

Решение
Определяем min и max productID
SELECT MIN(productID) AS min, MAX(productID) AS max FROM `goods`

Функция для генерации случайных чисел
  1. function gen_uniq_id($min, $max)
  2.     {
  3.         $uniq_id = array();
  4.  
  5.         for($i=0;$i<3;$i++)
  6.         {
  7.             while(1)
  8.             {
  9.                 $id = mt_rand($min, $max); // генерируем случайное число
  10.  
  11.                 // если данное число уникально — записываем в массив, иначе — повторяем цикл
  12.                 if(!in_array($id, $uniq_id))
  13.                 {
  14.                     $uniq_id[] = $id;
  15.                     break;
  16.                 }
  17.             }
  18.         }
  19.  
  20.         return $uniq_id = implode(‘, ‘, $uniq_id); // возвращаем строку вида: 1, 5, 3
  21.     }

Готовый запрос:
SELECT * FROM `products` WHERE productID IN ( gen_uniq_id($min, $max) ) [ LIMIT 3 ]
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх