Hallo Mark,
Ich habe mir eine Select-Abfrage zusammengebaut komm aber nicht weiter:
SELECT * FROM tbl1
WHERE id = ANY
(SELECT id FROM tbl1
WHERE (autor LIKE '0') ORDER BY position DESC LIMIT 0,3)ORDER BY rand(NOW()) LIMIT 1
ergibt erwartungsgemäß die von Dir angeführte Fehlermeldung. Du kannst LIMIT nicht dazu nutzen ein IN bzw. ANY-Konstrukt mit Daten zu füllen.
Gibt es noch eine andere Möglichkeit das ganze mit einem Query abzufragen?
Dir ist ja klar, dass
SELECT
<spaltenliste>
FROM
<tabelle>
ORDER BY
position DESC
LIMIT 3
die drei Datensätze liefert, aus denen Du einen zufällig auswählen willst. Du kannst dieses ganz simpel umsetzen, indem Du Deinen Datensatz genau aus dieser Ergebnismenge wählst:
SELECT -- Gib mir
a.spalte1, -- die gewünschten
...
a.spalteN -- Spalten
FROM ( -- aus dem Abfrageergebnis von
SELECT -- Gib mir
<spaltenliste> -- die gewünschten Spalten
FROM -- aus
<tabelle> -- meiner Tabelle
ORDER BY -- nach
position DESC -- Position absteigend sortiert,
LIMIT 3 -- beschränkt auf die ersten drei Datensätze
) a -- das über den Namen a angesprochen wird
ORDER BY -- sortiert nach
RAND() -- Zufall
LIMIT 1 -- begrenzt auf einen Datensatz
Sowas nennt man übrigens auch einen temporären View.
Freundliche Grüße
Vinzenz