MySQL Abfrage optimieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

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
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``.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

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
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

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
Antworten