Felder raussuchen, welche grosser als 0 sind

Kerwin

Erfahrenes Mitglied
Hallo,

Ich habe eine Tabelle mit rund 35 Spalten, wobei der Wert jeder Spalte entweder 0 sein kann oder aber > 0.
Nun ist die Frage, wie ich nur die Felder per Query abfrage die auch >0 sind.

Bisher mache ich das so, dass ich alle auslese und dann für jeden wert per foreach Schleife schaue ob dieser >0 ist. Aber das ist ja ein wenig ineffizient. Gibt es da vielleicht elegantere möglichkeiten?

Ich verwende mySQL
 
Du könntest versuchen, das ganze mit einer IF-Anweisung in Deinem Statement zu lösen.
(Da ich das selber noch nie gemacht habe, kann ich aber für den Erfolg nicht garantieren!)
Ich bin mir auch nicht sicher, ob diese Variante wirklich besser ist, als Deine foreach-Schleife, ...

redlama
 
flashOr hat gesagt.:
Vielleicht mit
Select * from Tabelle where Wert > '0'
Das bringt ja nun null Punkte. Ich weiß doch net welcher Wert größer null ist, also müsste ich da ja jeden angeben. Außerdem hat das mit der WHERE Klausel nicht viel zu tun, sondern mit dem SELECT Teil, denke ich.

@Redlama
Nur mal ganz bescheidene Frage, siehst du da durch :)? Hab da gerade mal mit rumgespielt und das haut vorne und hinten net hin. Egal was ich da eingebe (IFNULL, NULLIF ..), da bekomme ich nur einen rückgabewert

PHP:
$result = mysql_query('SELECT IFNULL(0,1)  FROM tabelle WHERE id = 1');
$data=mysql_fetch_assoc($result);
print_r($data);

Keine Ahnung wie man das richtig anwendet und die Beispiel dazu lassen wohl noch eine menge Fragen offen ;)
 
Zuletzt bearbeitet:
Nein, ich habe noch nie IF-Anweisungen in select Statements verwendet!
Aber ich glaube, Du musst ein select Statement kreieren, in dem Du für jedes Feld überprüfst, ob der Wert 0 ist oder nicht.
IF(expr1,expr2,expr3)

If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns expr2, else it returns expr3. IF() returns a numeric or string value, depending on the context in which it is used.



mysql> SELECT IF(1>2,2,3);
-> 3
Also ich denke mal ungefähr so:
Code:
select if(name <> 0, name), if(vorname <> 0, vorname), ...
Aber wie gesagt, da finde ich Deine foreach-Schleife wesentlich besser!

redlama
 
Hum, also das geht so zumindest erst einmal nicht ;).
Egal, ich belasse es bei der foreach() schleife, ist glaube einfacher.

PHP:
  $result = mysql_query('SELECT IF(ag <> 0, ag) FROM legierung_detail WHERE id = 4');
  $data = mysql_fetch_assoc($result);
  print_r($data);

Thx für deine Hilfe
 
Zuletzt bearbeitet:
Wenn Du ein Ergebnis hast, bzgl. der Schnelligkeit einer solchen Abfrage gegenüber einer einfachen Abfrage und einer foreach-Schleife, dann poste es bitte, denn es würde mich schon mal interessieren, was effektiver ist!

redlama
 
Zurück