Vinzenz Mai: Select String in MySQL DB

Beitrag lesen

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