Bovenste 10 selecteren en deze random weergeven?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicos

Nicos

11/03/2007 10:52:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

20/11/2024 11:46:43
 
Alfred -

Alfred -

11/03/2007 10:57:00
Quote Anchor link
SELECT velden FROM tabel ORDER BY id DESC, RAND() LIMIT 10

Veronderstellend dat id auto_increment is..
 
Jan Koehoorn

Jan Koehoorn

11/03/2007 11:03:00
Quote Anchor link
@ 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 shuffle door elkaar gooien.
 
Klaasjan Boven

Klaasjan Boven

11/03/2007 11:13:00
Quote Anchor link
Kan je in mysql niet iets doen als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Jan Koehoorn

Jan Koehoorn

11/03/2007 11:17:00
Quote Anchor link
Dan krijg je waarschijnlijk een foutmelding als: subquery returns more than 1 result
 
Klaasjan Boven

Klaasjan Boven

11/03/2007 11:20:00
Quote Anchor link
SELECT * FROM(SELECT * FROM `cds` limit 10) AS CDS order by RAND()

Geeft: Toon Records 0 - 2 (3 totaal, Query duurde 0.0265 sec)
 
Jan Koehoorn

Jan Koehoorn

11/03/2007 11:21:00
Quote Anchor link
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?
 
Klaasjan Boven

Klaasjan Boven

11/03/2007 11:27:00
Quote Anchor link
Net getest op een grotere tabel en het werkt prima.

nog even de juiste syntax:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Alfred -

Alfred -

11/03/2007 12:02:00
Quote Anchor link
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 :-)
 
Jurgen assaasas

Jurgen assaasas

11/03/2007 12:06:00
Quote Anchor link
ik gebruik meestal gewoon order by RAND() dit schijnt gewoon te werken

http://jurgen.idea-creation.nl

kijk maar de links aan de rechterkant(als je refresht).
 
Nicos

Nicos

11/03/2007 12:48:00
Quote Anchor link
$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
 
Klaasjan Boven

Klaasjan Boven

11/03/2007 19:50:00
Quote Anchor link
Wat is de foutmelding als ik vragen mag?
 
Frank -

Frank -

11/03/2007 19:56:00
Quote Anchor link
Een subquery om te bepalen in welke tabel moet worden gezocht? Lijkt mij geen goed plan.

Verder is het een goed idee om queries netjes uit te schrijven over meerdere regels, netjes inspringen, etc.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
  *
FROM
  tabelnaam

100x beter leesbaar en te debuggen.
 
Klaasjan Boven

Klaasjan Boven

11/03/2007 20:09:00
Quote Anchor link
@FRank lees het hele probleem even.

Ik ben nog steeds benieuwd naar de foutmelding. Geef dan ook even de mysql versie
 
Klaasjan Boven

Klaasjan Boven

11/03/2007 20:22:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
32    20-11-05    14:00:00
25    02-11-05    20:15:00
23    30-10-05    09:30:00
29    13-11-05    09:30:00
27    01-11-05    09:00:00
28    06-11-05    14:00:00
24    30-10-05    14:00:00
26    06-11-05    09:00:00
31    20-11-05    09:00:00
30    13-11-05    14:00:00


krijg ik bij
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM (

SELECT *
FROM `Kerktijden`
ORDER BY ID ASC
LIMIT 0 , 10
) AS HOOGSTE10
ORDER BY RAND( )
LIMIT 0 , 10


Opgemerkt dat mijn tabel bi 30 begint
 
Nicos

Nicos

14/03/2007 00:20:00
Quote Anchor link
Het is gelukt, hartelijk dank iedereen voor de tips.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.