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