[MYSQL]Problem : zufälliger Datensatz der 5 aktuellsten Datensätze ausgeben

D

dieterDox

Hi ^^ ,
folgendes Problem:

ich würde gerne einen zufälligen Datensatz aus den letzten 5 Einträgen ausgebenlassen.
Was ich bis jetz habe ist an SQL die die letzten 5 Einträge.

SELECT id, title, pid crdate WHERE pid = 100 ORDER BY crdate LIMIT 5

Das es nun einen Datensatz zufaellig aus wählt ,wird in einem PHP-script realliesiert.


Meine eigentliche Frage ist nun kann ich das komplett in eine MYSQL Anweisung packen ?


MFG dieterDOX
 
Nicht getestet, aber das dürfte dir helfen:

SQL:
SELECT id, title, pid, crdate FROM deine_tabelle WHERE pid = 100 AND crdate = (SELECT MAX(crdate) FROM deine_tabelle LIMIT 1) ORDER BY RAND() LIMIT 5

Gruß Thomas
 
Die Anfrage von tombe funktioniert vermutlich nicht, da LIMIT in Subqueries nicht funktioniert und außerdem würde doch dann nur ein Datensatz ausgelesen werden (eben der mit dem größen crdate Wert).

So würde ich es machen (Wobei ich es einfach in php lassen würde)
SQL:
SELECT * FROM (SELECT id, title, pid, crdate WHERE pid = 100 ORDER BY crdate LIMIT 5) AS top5
ORDER BY RAND() LIMIT 1;
 
Also ich habe es jetzt mal bei mir lokal getestet und so wie es aussieht klappt es auch so wie gewünscht.

Warten wir mal darauf bis dieterDOX es mit seinen Daten versucht hat.
 
@CPoly genau so wäre auch meine Lösung gewesen. Du hast die Angabe der Tabelle vergessen (Tippfehler :))
SQL:
SELECT * 
FROM (

SELECT id, title, pid, crdate
FROM TABELLE
WHERE pid =100
ORDER BY crdate 
LIMIT 5 
) AS top5
ORDER BY RAND( ) 
LIMIT 1

@tombe
Dein Script verstehe ich nicht, du legst fest das crdate das Aktuellste sein muss, damit hast du nur noch ein Tupel. Eine zufällige Sortierung von einem Tupel macht wenig Sinn? Aber vielleicht übersehe ich auch etwas.
 
Zuletzt bearbeitet von einem Moderator:
hi Leute^^ ,

danke fuer die schnelle hilfe ;-)

@tombe dein script gibt mir nur den aktuellen eintrag aus von den Fünfen.

@CPoly vielen dank , genau was ich gesucht habe ^^.
Ich wusste garnicht, dass man nach FROM noch ein quasi DB-abfrage einbauen kann.
Wenn ich das richtig verstehe, wird ein virtuelle tabelle top5 erzeugt auf den die dann WHERE und ORDER usw. angewendert werden kann ...
Wieder was dazu gelernt.
 

Neue Beiträge

Zurück