miten saan haettua satunnaisen rivin kannasta?
satunnainen rivi kannasta
heppu
4268
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 4
Vanhimmat
$query = "SELECT * FROM table
ORDER BY RAND()";
Pitäis toimia tai sitten
$query = "SELECT DISTINCT row FROM table ORDER BY RAND()";
*SELECT * FROM table
ORDER BY RAND()*
Jos tuota käyttää niin LIMIT 1 perään. Ja jos taulu kasvaa suureksi niin tuo on hidas ja raskas, turhaa järjestää johonkin järjestykseen koska tarvitaan satunnainen. Toki pikkuruisilla taulukoilla toimii kohtuudel.
Ennemmin vaik tähän malliin
SELECT * FROM taulu WHERE id >= RAND() * (SELECT COUNT(*) FROM taulu LIMIT 1) LIMIT 1
Tai sitten
$sql = "SELECT * FROM taulu WHERE id >= rand(1,x) LIMIT 1";
x = max id.
Viimisen ei sovellu kovinhyvin tapaukseen missä tietoja lisäillään/poistellaan ahkeraan.
Eipä ollut mitään tekemistä joten tuli testattua noita, palvelimel ei testi hetkel muita käyttäjiä joten lukemat kohtuu vertailu kelpoisia. Testattu PHP:n kautta microtimel aika. Tuo yks esittämäni juttu ei näyttänyt toimivan MySQL oikein.
*SELECT * FROM table
ORDER BY RAND()*
A: 0.0029 sek
B: 0.0493 sek
C: 0.9518 sek
D: 4.2748 sek
*$sql = "SELECT * FROM taulu WHERE id >= rand(1,x) LIMIT 1";*
A: 0.0016 sek
B: 0.0016 sek
C: 0.0012 sek
D: 0.0012 sek
SELECT MAX(*) FROM testi2 LIMIT 1
$id = rand(1,edellisen kyselyn tulos);
$sql = "SELECT * FROM taulu WHERE id >= $id LIMIT 1";
A: 0.0016 sek
B: 0.0016 sek
C: 0.0016 sek
D: 0.0017 sek
A = 1000 riviä, koko 40 768 t
B = 10000 riviä, koko 373 888 t
C = 511295 riviä, koko 19 964 kt
V = 1022590 riviä, koko 39 533 kt
Koko sisältää sitten myös index.
Kokeilin vielä huvikseni 100 riviä sisältävällä, niin silloin tuo ORDER BY RAND() näytti olevan melkein yhtänopea. Loppupäätelmä, ettei tuota kannata käyttää kuin todella pienissä tauluis.
Vaik nois kyselyis on taulun nimi eri, niin silti kaik testattiin samal. SELECT MAX(*) pitäs ol SELECT MAX(id). Antees sekoilu, ei pitäs kirjoittaa viestiä pienis osis tunteja ;)