MySQL Abfrage mit integrierter Multiplikation

Quests Sohn

Mitglied
Hallo,

ich komme nicht weiter.

Ich möchte folgende DB-Abfrage machen:

PHP:
SELECT SUM(gesamt*anteil*2) AS geld FROM nutzer WHERE geld >= '$mein_geld'

wobei $mein_geld vorgegeben wird (z. B. 345,67) und gesamt und anteil Tabellenspalten
der Datenbank sind. Alle Werte sind Dezimalzahlen (z. B. "2.50").

Die Abfrage ergibt einen Fehler.

Ich denke, das Problem ist, dass ich das gerade erst innerhalb der Abfrage erstellte "geld"
gleich mit einem vorgegebenen Wert ("$mein_geld") vergleiche, oder?!

Aber wie kann ich sonst abfragen, wie viele andere Nutzer mehr "geld" haben, als ich
(sprich der zu vergleichende Nutzer)?
 
Hallo,

[...]
Die Abfrage ergibt einen Fehler.
[...]
welchen? Tut mir Leid, ich kann nicht Gedanken lesen ;)

Also an deiner Query an sich, so wie du die gepostet hast, ist an sich nichts falsch. Schreib doch bitte mal die PHP Zeile, in der du die Query wegschickst oder in eine Variable speicherst.

Wenn ich dich richtig verstehe, dann dürfte dir aber das HAVING besser helfen als dein WHERE.
Mehr nach deiner Antwort ;)

Gruß
Bratkartoffel
 
Zuletzt bearbeitet:
Wie waere es denn, wenn du es einfach vorher in einer variablen querry brechnest und sie dann alst String als Querry uebergibst.
Das ist ja eigentlich fast nochmal und warum sollte man auch nicht.
 
Danke erstmal, ich habe die Abfrage umgebastelt, aber sie funktioniert noch immer nicht.

Also zur Übersicht:
Ich habe eine Tabelle "nutzer" mit den Feldern

+--------+---------------+--------------+
| id | gesamt | anteil |
+--------+---------------+--------------+
| 1 | 66.00 | 0.70 |
+--------+---------------+--------------+
| 2 | 100.00 | 2.50 |
+--------+---------------+--------------+
| 3 | 200.00 | 0.80 |
+--------+---------------+--------------+

PHP:
$mein_wert = "92.40"; // 66,00 * 0.7 * 2
$res_vergleich = mysql_query("SELECT gesamt, anteil FROM nutzer HAVING SUM(gesamt*anteil*2) >= '$mein_wert'"); 
$platz = mysql_num_rows($res_vergleich); 
$vergleich = mysql_fetch_array($res_vergleich);

Das ergibt die Meldung

"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource"
 
1. SUM() wie alle Aggregat-Funktionen werden durch HAVING eingeschränkt
2. HAVING ist nur zulässig, wenn es auch Gruppierungen (GROUP BY) gibt.

3. Ist das glaube ich alles nicht das, was du eigentlich willst.
4. Wenn du dein eigentliches Problem beschreiben würdest, könnte man dir schneller helfen.

5. Nehme ich jetzt einfach mal an, dass du wissen willst, für welche Benutzer gilt, dass gesamt * anteil * 2 > Betrag ist. Ein SUM hat dann da überhaupt nichts zu suchen. (Beispiel: Betrag = 100.00)

SQL:
SELECT * 
FROM nutzer 
WHERE gesamt*anteil*2 >= 100.00;
 
Genau das wars. Ich hätte nie gedacht, wie einfach es sein kann.
Mir war nicht bewusst, dass man in der WHERE Klausel einfach Berechnungen durchführen darf.


VIELEN DANK ALLEN ANTWORTERN!
 

Neue Beiträge

Zurück