[rtl]
سلام دوستان
خسته نباشید همگی
دنبال یه روش خوب و بهینه برای دریافت تصادفی اطلاعات از دیتابیس میگردماینترنت و زیر و رو کردمروشهایی که وجود داره معمول ترین روش ORDER BY RAND() هست،
این روش بهینه نیست و وقتی رکوردای داخل جدول زیاد بشن وقت زیادی میگیره
روش بعدی که پیدا کردم که روشم خودم کار کردم بازم بهینه نشد، استفاده از توابع procedural توی mysql هست.[/rtl]
[sql]CREATE DEFINER=root
@localhost
PROCEDURE random_product
(IN cnt
INT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS product_rands;
CREATE TEMPORARY TABLE product_rands ( rand_id INT );
loop_me: LOOP
IF cnt < 1 THEN
LEAVE loop_me;
END IF;
set @minv := (SELECT MIN(id) FROM products);
set @maxv := (SELECT MAX(id) FROM products);
INSERT INTO product_rands
SELECT r1.id
FROM products AS r1 JOIN
(SELECT @minv+(RAND() * (@maxv-@minv)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1;
SET cnt = cnt - 1;
END LOOP loop_me;END[/sql] [rtl]خوب این روش واسه جدولای بزرگ و کوچیک کلا واسش فرق نداره، جفتش فعلا روی LocalHost حدود 0.3 ثانیه وقت میگیره که خیلی زیـاااده! [/rtl]
روش سوم دیگه پیدا نکردم اگه نظری دارین خوشحال میشم راهنمایی کنید