2011-01-16 10 views
0

ich eine Abfrage wie folgt konstruieren will:MySQL - bedingte Abfrage, führt auf Anweisung

SELECT * FROM t1 WHERE sichtbar = 'yes' AND IF (Verkauf = 'yes', Menge> 0)

Es ist mein Ziel, nur die Zeilen aus der Tabelle mit einer Menge von mehr als 0 nur zu erhalten, wenn es sich um ein "Verkaufsprodukt" handelt. Ich habe versucht, IF und CASE-Anweisungen, aber es scheint, dass das Ergebnis dieser kann nur durch eine Zeichenfolge von ganzen Zahlen, keine Aussage.

ich hier stecke ...

Antwort

1
SELECT * FROM t1 WHERE visible='yes' AND ((sale = 'yes' AND quantity > 0) OR sale != 'yes') 
+0

Ich dachte viel zu kompliziert für diesen einen, danke dafür, es für mich zu richten! – klaaz

1

Sie die 3. Paramater inder IF Funktion fehlt

SELECT * 
FROM t1 
WHERE visible='yes' 
    AND IF (sale = 'yes', quantity > 0, 1) 

gilt SQL

2

Wenn Sie seinen ursprünglichen Text "lesen Nurempfangs die Zeilen aus der Tabelle mit einer Menge von mehr als 0 NUR, wenn es sich um ein "Verkaufsprodukt" handelt.

Da ist die Frage etwas schlecht formuliert. Die Annahme lautet:

Geben Sie NUR Artikel zurück, bei denen SALE = 'yes' und QUANTITY> 0 und VISIBLE = 'yes' sind.

Wenn das ist, was die Nutzer wollen, für die SQL ist einfach:

SELECT * FROM t1 WHERE sale='yes' AND quantity > 0 AND visible='yes' 

BTW, wenn Ihre DB viele Daten halten wird, mit booleans (true/false) statt Varchars ist viel mehr Effizient im Motor und spart Zeit beim Selektieren und Einlegen.

+0

Dank ich weiß, dass dieses ist relativ klein. – klaaz