Ik wil doormiddel van een query de laatst 10 ingevoerde records uit een database selecteren. Vervolgens wil ik de volgorde telkens random weergeven.

Nu kan ik de volgende query gebruiken:

SELECT * from Content WHERE Soortbericht = 2 ORDER BY RAND() LIMIT 10

Nu haal ik dus willekeurig (random) 10 records op. Maar ik wil graag alleen de laatst ingevoerde. Kan ik bijvoorbeeld ook 2 order opdrachten meegeven zodat ik ook nog op id (autonummering) kan sorteren?
SELECT velden FROM tabel ORDER BY id DESC, RAND() LIMIT 10

Veronderstellend dat id auto_increment is..
@ Rafael: die heb ik net ff lokaal getest, maar die geeft nog steeds de laatste tien id's in aflopende volgorde. Een minder elegante oplossing zou dus zijn:

select *
from Content
order by id desc
limit 10

Dan de resultaten fetchen, in een array stoppen, en die met [php]shuffle[/php] door elkaar gooien.
Kan je in mysql niet iets doen als:


SELECT * FROM 
(SELECT * FROM CONTENT ORDER BY ID LIMIT 10)
ORDER BY RAND



edit dit heb in net gedaan in phpmyadmin en werkt:


SELECT *
FROM (

SELECT *
FROM `cds`
) AS CDS
LIMIT 0 , 30
Dan krijg je waarschijnlijk een foutmelding als: subquery returns more than 1 result
SELECT * FROM(SELECT * FROM `cds` limit 10) AS CDS order by RAND()

Geeft: Toon Records 0 - 2 (3 totaal, Query duurde 0.0265 sec)
Klaasjan Boven schreef op 11.03.2007 11:13
dit heb in net gedaan in phpmyadmin en werkt:

SELECT *
FROM (

SELECT *
FROM `cds`
) AS CDS
LIMIT 0 , 30

Daar zit geen RAND in?
Net getest op een grotere tabel en het werkt prima.

nog even de juiste syntax:


<?php
$sql="SELECT * // normaal natuurlijk de velden 
         FROM ( // nu komt de squbquery
         SELECT * FROM jouwtabel LIMIT 10)
         AS HOOGSTE_TIEN  // zonder alias werkt het niet. Ik denk dat mysql het                   //resulaat als view behandeld
         ORDER BY RAND()";
?>


Let niet op de kleurtjes
Jan Koehoorn schreef op 11.03.2007 11:03
@ Rafael: die heb ik net ff lokaal getest, maar die geeft nog steeds de laatste tien id's in aflopende volgorde.


Raar, ik dacht dat hij het hier net goed deed, maar na opnieuw te testen blijkbaar niet. Ik zal misgekeken hebben :-)
$nieuws = mysql_query("SELECT * FROM(SELECT * from Content WHERE Soortbericht = 3 order by Id desc LIMIT 10) AS HOOGSTE10 ORDER BY RANDOM()")

Euh, dit bovenstaande geeft een foutmelding

Reageren