Rand BY MySQL ORDER (), isim ASC

4 Cevap php

Ben, diyelim ki bir veritabanı almak istiyorum 1000 kullanıcı ve 20 rasgele olanları (ORDER BY rand(), LIMIT 20) ardından isimleri belirlenen sonuçta sipariş seçmek olacaktır. Ben ümit gibi not çalışıyor aşağıdaki sorgu ile geldi.

SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20

4 Cevap

Bir sorgu kullanın:

SELECT * FROM 
(
    SELECT * FROM users ORDER BY rand() LIMIT 20
) T1
ORDER BY name 

İç sorgu rastgele 20 kullanıcı seçer ve dış sorgu adıyla seçilmiş kullanıcıların emreder.

Bunun yerine, bir alt sorgu kullanarak, rastgele satır seçmek için satır sayısını ve diğer almak için iki ayrı sorgu, birini kullanabilirsiniz.

SELECT COUNT(id) FROM users; #id is the primary key

Sonra, rastgele bir yirmi satır olsun.

$start_row = mt_rand(0, $total_rows - 20);

Son sorgu:

SELECT * FROM users ORDER BY name ASC LIMIT $start_row, 20;

Çünkü performans ve sonuçlar RAND () ORDER BY sakının. Bu makaleye göz atın: http://jan.kneschke.de/projects/mysql/order-by-rand/

Bir sorgu kullanın:

SELECT * FROM (
    SELECT * FROM users ORDER BY RAND() LIMIT 20
) u
ORDER BY name

veya kendisine katılmak:

SELECT * FROM users u1
INNER JOIN (
    SELECT id FROM users ORDER BY RAND() LIMIT 20
) u2 USING(id)
ORDER BY u1.name