Du bist nicht angemeldet.

Tharian

Schüler

  • »Tharian« ist der Autor dieses Themas

Beiträge: 100

Registrierungsdatum: 16.02.2012

Danksagungen: 13

  • Private Nachricht senden

1

16.02.2012, 15:40

Multiplikation in SQL-Abfrage

Hallo erstmal!

Bin ganz neu hier angekommen und wüd euch gerne eine Frage stellen.
Ich möchte in einer SQL-Abfrage zwei Werte mit einander Multiplizieren.

etwa so:
$sql = "SELECT zahl, SUM(werte) AS wert1, SUM(wert1 * zahl) AS ergebnis ... ORDER BY ergebnis;

Diese Fehlermeldung kommt dann:
Unknown column 'wert1' in 'field list'

Heißt ja, dass wert1 kein Spaltenname der Tabelle ist. (das wär ja auch zu einfach^^
Was kann ich also tun, damit MySQL den vorher berechneten wert1 weiterberechnen kann?

Wäre euch für eine Antwort dankbar.
Plattform für Browsergames von Hobbyentwicklern

Tharian.de

Johannes S.

Fortgeschrittener

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

2

16.02.2012, 16:24

Kannst du die Berechnungen nicht zuvor oder danach in PHP oder in welcher Sprache du auch immer schreibst durchfüren?
Signatur ?

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

3

16.02.2012, 16:28

Hi erstmal :D
Kein plan, noch nie gamacht... ich benutz SQL nur mit PHP ;D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

4

16.02.2012, 16:50

Du könntest User Variablen in MySQL nutzen.
Das könnte dann so aussehen:

MySQL-Abfrage(n)

1
SELECT @wert1 :=12 AS w1, @wert1 * 2 as w2

Das definiert die Uservariable wert1 mit 12 und fügt sie zusätzlich noch ins Result als w1.
Dann wird mit @wert1 (Nicht w1) im folgenden auf den Wert zugegriffen.

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Tharian (17.02.2012)

Tharian

Schüler

  • »Tharian« ist der Autor dieses Themas

Beiträge: 100

Registrierungsdatum: 16.02.2012

Danksagungen: 13

  • Private Nachricht senden

5

16.02.2012, 22:32

Kannst du die Berechnungen nicht zuvor oder danach in PHP oder in welcher Sprache du auch immer schreibst durchfüren?
Dann bräuchte ich ja ne 2. SQL-Abfrage. Das geht bei größerer Nutzerzahl auf die Performance, weil die Menge an Daten doch erheblich sind, die auszulesen ist. Wenn ich das ganze dann noch mal an PHP übergebe, wirds nochmal langsammer...

Hi erstmal :D
Kein plan, noch nie gamacht... ich benutz SQL nur mit PHP ;D
Na ja... ich ja auch.

Du könntest User Variablen in MySQL nutzen.
Das könnte dann so aussehen:

MySQL-Abfrage(n)

1
SELECT @wert1 :=12 AS w1, @wert1 * 2 as w2

Das definiert die Uservariable wert1 mit 12 und fügt sie zusätzlich noch ins Result als w1.
Dann wird mit @wert1 (Nicht w1) im folgenden auf den Wert zugegriffen.
Das funktioniert irgendwie aber auch nicht...
Habs jetzt quasi so:
$sql = "SELECT @wert1:= count(werte) AS wert1, zahl, SUM(@wert1 * zahl) AS summe... ORDER BY summe;
bzw:
$sql = "SELECT @wert1:= count(werte) AS wert1, zahl, @wert1 * zahl AS summe... ORDER BY summe;

Es kommt zu keinen Fehlern.
Weder MySQL meckert am String herum, noch jammert PHP, das summe nicht existiert. Bei der Ausgabe kommt aber nichts zurück.
Sehr merkwürdig
Plattform für Browsergames von Hobbyentwicklern

Tharian.de

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tharian« (16.02.2012, 23:48)


Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

6

17.02.2012, 15:36

Komisch, man scheint die User Variable vorher definieren müssen.
Also entweder mit SET oder einem anderen SELECT.

MySQL-Abfrage(n)

1
2
SELECT @wert1:= count(werte) FROM table;
SELECT zahl, SUM(@wert1 * zahl) AS summe... ORDER BY summe;

Dann funktioniert es. Jedoch ist diese Lösung nicht sonderlich schön, finde ich. :s

Edit: mit [ mysql][/mysql ] ohne die Leerzeichen kannst du MySQL schöner hier formatieren lassen ;)

liro

Fortgeschrittener

Beiträge: 180

Danksagungen: 36

  • Private Nachricht senden

7

17.01.2014, 16:11

Veraltet... jaja...

MySQL-Abfrage(n)

1
SELECT zahl, SUM(werte) AS wert1, SUM(wert1 * zahl) AS ergebnis ... ORDER BY ergebnis;


du willst also:
  • erst alle "werte" zusammenzählen(was ein Aggregation ist) und in wert1 ablegen
  • dann wert1 mit jeweils "zahl" in jedem Eintrag multiplizieren und dann wieder durch die sum-Aggregation jagen


kurzum: Die Abfrage macht keinen Sinn, geschweige davon, dass man keine Spalten, die nicht in einem GROUP BY auftauchen nicht mit Aggrationen mischen sollte(was normale Datenbanken einem sofort sagen würden(MySQL gehört nicht dazu)).
Aber du hättest auch einfach schreiben können, was du denn genau haben willst, dann hätte man dir auch helfen können, so leider nicht.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »liro« (17.01.2014, 16:18)


Ähnliche Themen