Seite 1 von 1
MySQL Abfrage optimieren
Verfasst: Mittwoch 20. Mai 2009, 10:35
von Damaskus
Moin,
ist etwas OT aber passt hier glaub ich trotzdem rein
Gibt es eine Möglichkeit folgendes Codeschnipsel komplett in eine MySQL Abfrage zu integrieren?
Code: Alles auswählen
query = """SELECT guthaben FROM KD_Guthaben WHERE id = %s"""
self.cursor.execute(query, (uid))
row = self.cursor.fetchone()
guthaben = row[0]
if guthaben >= preis:
return True
else:
return False
Gruß
Damaskus
Verfasst: Mittwoch 20. Mai 2009, 11:35
von BlackJack
Was heisst "komplett"? Ungetestet:
Code: Alles auswählen
query = """SELECT guthaben >= %s FROM KD_Guthaben WHERE id = %s"""
self.cursor.execute(query, (preis, uid))
row = self.cursor.fetchone()
return bool(row[0])
Aber irgendwie ist da nicht viel gewonnen.
Dein ``if``/``else`` ist zu kompliziert, es reicht auch ``return guthaben >= preis``.
Verfasst: Mittwoch 20. Mai 2009, 14:49
von Damaskus
Was heisst "komplett"?
Komplett wäre gewesen das mir MySQL ein True bzw. False oder 1 bzw. 0 liefert wenn der Preis höher ist als das Guthaben.
Ich hab aber auch in der MySQL Doku nichts brauchbares gefunden.
Dein ``if``/``else`` ist zu kompliziert, es reicht auch ``return guthaben >= preis``.
die if / else Anweisung ignorieren.
Ich hab das Schnipsel einfach so getippt ohne überhaupt zu testen ob es funktioniert. Sollte nur als Beispiel dienen.
Gruß
Damaskus
Verfasst: Mittwoch 20. Mai 2009, 16:16
von Y0Gi
Damaskus hat geschrieben:Komplett wäre gewesen das mir MySQL ein True bzw. False oder 1 bzw. 0 liefert wenn der Preis höher ist als das Guthaben.
Genau das sollte die Abfrage von BlackJack tun. SELECTed wird ein Wahrheitswert, der sich aus dem angegebenen Ausdruck (x >= y) ergibt.
Damaskus hat geschrieben:Ich hab aber auch in der MySQL Doku nichts brauchbares gefunden.
Das sind allgemein SQL-Grundlagen.
Damaskus hat geschrieben:Ich hab das Schnipsel einfach so getippt ohne überhaupt zu testen ob es funktioniert. Sollte nur als Beispiel dienen.
Als Programmierer solltest du wissen, dass eine if-else-Abfrage sich nach einem Wahrheitswert richtet. Dieser wird von der Bedinung geliefert, und das ist hier `guthaben >= preis`. Da deine beiden Rückgabewerte exakt mit dem Wahrheitswert der Bedingung übereinstimmen, ist die if-Geschichte vollkommen überflüssig und du kannst direkt den Wahrheitswert der Bedingung zurückgeben.
Verfasst: Freitag 22. Mai 2009, 13:07
von Damaskus
Y0Gi hat geschrieben:Damaskus hat geschrieben:Komplett wäre gewesen das mir MySQL ein True bzw. False oder 1 bzw. 0 liefert wenn der Preis höher ist als das Guthaben.
Genau das sollte die Abfrage von BlackJack tun. SELECTed wird ein Wahrheitswert, der sich aus dem angegebenen Ausdruck (x >= y) ergibt.
Sry. war mir nicht klar das die Abfrage einen boolschen Wert liefert. Wieder was dazu gelernt.
Gruß
Damaskus