2016-06-02 9 views
0

Wie kann dieser Code in die richtige Abfrage konvertieren? Ist es möglich?
zuerst ich möchte prüfen, ob id IN (55,1454,232,444,10999,223) Zeilen existiert. Wenn nicht, erhalten Sie Zeilen nach dem Zufallsprinzip.MySqli Put IF in Abfrage auswählen

SELECT 
     id 
     name 
     title 
FROM 
     table t 
WHERE 
     id IN (55,1454,232,444,10999,223) 

IF count_row(t) == 0 // <-- if for WHERE no result row 
     SELECT 
      id 
      name 
      title 
     FROM 
      table 
     ORDER BY RAND() 
     LIMIT 20 
+0

Sie so etwas wie PHP verwenden Sie? Ich glaube auch nicht, dass Sie beides in MySqli tun können. Sie sollten das in 2 Abfragen tun, wie "1 -> Wählen Sie von wo und 2 -> wenn row_count (old_query) = 0, machen Sie die andere Abfrage". – Pleasure

+0

Sie können 'gespeicherte Prozedur' für diese –

+0

@Pleasure ja 'php' machen, genau will ich nicht 2 Abfrage verwenden. ist es möglich, eine Abfrage? – grizzly

Antwort

1

Versuchen Sie so etwas wie:

SELECT id, 
      name, 
      title 
    FROM 
      table t 
    WHERE 
      id IN (55,1454,232,444,10999,223) 

    UNION 

    SELECT * 
    FROM 
     table t 
    WHERE NOT EXISTS (SELECT id, 
          name, 
          title 
         FROM 
          table t 
         WHERE 
          id IN (55,1454,232,444,10999,223)); 
+0

Ihrer Meinung nach ist die Verwendung von 2 Abfrage besser von 'NICHT VORHANDEN'? für Optimize ... – grizzly

+1

Ehrlich gesagt, nicht sicher mit MySqli, weil ich es nie benutzt habe, aber wenn Sie PHP verwenden, sind beide in Ordnung. Ich gehe lieber für die 2 Abfragen, weil es "vielseitiger" ist. Beispielsweise könnten Sie eine weitere Abfrage hinzufügen möchten, wenn nur eine Zeile zurückgegeben wird. Es hängt auch von der Anzahl der Zeilen ab, die Sie in Ihrer Tabelle t haben. Kann nicht wirklich fragen, versuchen beide und sehen, wer der Beste ist (am schnellsten?) – Pleasure

+0

es ist wahr, ich versuche zwei Methoden. danke für die Antwort. – grizzly