Seite 1 von 1

SQL multiplikation über 2 tabellen

Verfasst: 09.08.2007, 06:23
von FuchsT
Hallo,

ich scheitere gerade an einer Multiplikation in mySQL, die über 2 Tabellen geht.
Ich denke ich muss das mit einem JOIN lösen, aber ich schaffs einfach nicht.
Ich würde sowas benötigen (ist natürlich vollkommen falsch, nur zum Verständnis)
(select count(*) from Table1 where xxx=yyy) * (select feld from table2 where aaa=bbb)

In PHP könnte man diese Multiplikation sicher auch lösen, aber ich hätte es einfach gerne in SQL.
Also wer einen Tipp hat... Bitte!

Danke
Thomas

Verfasst:
von

Verfasst: 09.08.2007, 07:59
von King of Darkness
Hallo,

ich bin mir nicht ganz sicher
aber versuch das mal:
select feld*(select count(*) from Table1 where xxx=yyy) from table2 where aaa=bbb

ich bin mir sicher das es nicht wirklich die performanteste lösung ist (falls es überhaupt geht)
aber dort macht er dann pro zeile den Count -> langsam

was anders fällt mir aber auf die schnelle nicht ein

meine Frage jetzt an dich, wozu machst du das, bzw. beschreib mal deine absichten etwas genauer

Gruß
King of Darkness

Verfasst: 09.08.2007, 08:03
von FuchsT
Hallo,

Danke für den Code. Ich werde ihn mal testen.
Meine Absicht dahinter ist folgende:
In Tabelle1 stehen alle Aktionen 1 Datensatz ist eine Aktion.
In Feld von Tabelle2 steht der Preis pro Aktion.

Das muss ich multplizieren.

gruß
Thomas

Verfasst:
von

Verfasst: 09.08.2007, 08:19
von FuchsT
hi,

geht leider nicht. hab alle möglichen (und unmöglichen) combinationen probiert.
immer ein syntaxfehler.

noch ideen?

gruß
Thomas

Verfasst: 09.08.2007, 09:31
von King of Darkness
Hi,

ich nehm mal stark an das du das mit Ids verbunden hast:

SELECT SUM(table2.wert) FROM table1 INNER JOIN table2 ON table1.wert_id = table2.id GROUP by table1.wert_id

vielleicht hast ja noch Userids oder sowas dann GROUP BY table1.userid, table1.wert_id

ist erstmal n anderer ansatz:
du holst dir erstmal jeden datensatz gruppierst dann nach der Id oder dem namen oder sonst was und summierst dann die werte auf


Gruß
King of Darkness

Verfasst: 09.08.2007, 12:40
von Southmedia
Das letzte von King of Darkness sollte funktionieren, wobei table2.wert der Preis ist.

Was steht denn konkret in deinen Tabellen drin FuchsT? Dann könnte man das ein wenig besser erklären was du wie tun musst.

Verfasst: 09.08.2007, 18:33
von FuchsT
Hallo,

also ich steig irgendwie aus...
Ich bedanke mich vielmals für die mühe, aber ich mach das - denke ich - lieber in PHP.
Ich erklär aber noch weiter, ev. wollt ihr ja noch diskutieren.

Es geht im prinzip darum, dass andere leute links für mich tauschen und die daten für den link einer db eingetragen werden.
Tabelle1 (ein bißchen vereinfacht)
id|link|backlink|date|user
Tabelle2
id|user|email|preisprolink|

ich muss nun alle getauschen links (summe der tabelle1 für den user) mit dem preis pro link (tabelle2 preisprolink) multipilzieren.
so viel muss ich dann für die links bezahlen.

im vorschlag von King of Darkness kapier ich das mit den IDs nicht.
die IDs haben keinen bezug zueinander.
der einzige bezug ist der user.

ich habs jetzt mit 2 db abfragen und einer php multiplikation gelöst.
aber wenn noch wer einen vorschlag posten will... lernwillig bin ich immer.

Danke!
Thomas

Verfasst: 09.08.2007, 19:29
von Southmedia
Sehe ich das richtig dass es viele Einträge in Tabelle1 (n) gibt die sich dann auf 1 Eintrag in Tabelle 2 beziehen? (1)? Jedem User ist also genau ein PreisProLink zugewiesen, auf den dann mehrmals in der Tabelle1 "verlinkt" wird?

Verfasst: 10.08.2007, 06:05
von FuchsT
genau.
ein user hat einen datensatz.
der getauschte link hat einen datensatz

Verfasst: 10.08.2007, 12:02
von Southmedia
dann sollte in tabelle1 eigentlich die ID des users und nicht der user selbst gespeichert werden.

Code: Alles auswählen

SELECT SUM(table2.preisprolink) FROM table1 INNER JOIN table2 ON table1.user = table2.user GROUP by table1.user
Aber damit solltest du deine gesuchen Werte bekommen.

Verfasst: 10.08.2007, 15:18
von FuchsT
das funktioniert!!!
super. vielen dank!

ich versuchs mal zu erklären.
du "verbindest" (JOIN) Tabelle1 mit Tabell2 über den user
und summierst dann einfach den preisprolink.
richtig?

der user muss sich einloggen und es wird eine session generiert.
die session wird aber immer mit dem user gemacht. deshalb hab ich auch den user gespeichert. das war ein tutorial. ich bin nicht sicher wie das zu ändern wäre.

aber dein code hat mir wieder ein bißchen mehr die augen geöffnet.

danke & gruß
Thomas

Verfasst: 14.08.2007, 11:39
von Southmedia
Ich hole alle Benutzer. Dann hole ich die zu jedem Benutzer passenden Link-Einträge und kombiniere diese beiden Tabellen. Dann berechne ich die Summe der Linkpreise (SUM) pro Nutzer (GROUP BY). Fertig :)