Berechnung in MySQL-Query mit mehreren Tabellen
08.12.2007
00:44:21 Uhr5967 Aufrufe
3 Antworten
00:44:21 Uhr
3 Antworten
Noch nicht bewertet
Berechnung mit Werten aus verschiedenen Tabellen inerhalb des Querys
Hallo, also ich habe ein Problem mit einer MySQL Datenbankabfrage in PHP. Ich möchte alle Datensätze anzeigen
bei denen die Summe zweier Werte kleiner ist als die Userwerte. Die Informationen zu dem datensatz stehen
in einer Tabelle 'daten', die zu addierenden Zahlen stehen in einer anderen tabelle, welche mit der datentabelle verknüpft ist.
Die werte des Users der die Abfrage, sagen wir beispielsweise per Buttonklick auslöst stehen in der 'user' Tabelle.
Mein Aufbau:
Tabelle 'daten':
daten_id
werte_id
daten_beschreibung
Tabelle 'werte':
werte_id
daten_id
wert_01
wert_02
Tabelle 'user':
user_id
userwert_01
userwert_02
Meine Abfrage sollte irgendwie folgendes tun:
Gib mir alle Daten aus der Tabelle 'daten' bei denen Wert_01 + wert_02 kleiner ist als userwert_01 + userwert_02
Das einzige was ich als variable habe ist die user_id.
So mein Problem ist schonmal, wie spreche ich mehrer Tabellen gleichzeitig an?
Kann ich in einem SQL Query auch schon mit den Werten rechnen oder sollte ich einfach alle Werte auslesen und danach selektieren?
Was ist schneller, ein langer Query oder einen Berechnung in PHP?
So, mein Problem hab ich etwas vereinfacht, meine Berechnung sieht wesentlich komplexer aus, aber dann steigt man nicht gleich durch
und ich möchte ja auch das mir jemand hilft und nicht gleich schreiend davon rennt.
mfg
tobi
bei denen die Summe zweier Werte kleiner ist als die Userwerte. Die Informationen zu dem datensatz stehen
in einer Tabelle 'daten', die zu addierenden Zahlen stehen in einer anderen tabelle, welche mit der datentabelle verknüpft ist.
Die werte des Users der die Abfrage, sagen wir beispielsweise per Buttonklick auslöst stehen in der 'user' Tabelle.
Mein Aufbau:
Tabelle 'daten':
daten_id
werte_id
daten_beschreibung
Tabelle 'werte':
werte_id
daten_id
wert_01
wert_02
Tabelle 'user':
user_id
userwert_01
userwert_02
Meine Abfrage sollte irgendwie folgendes tun:
Gib mir alle Daten aus der Tabelle 'daten' bei denen Wert_01 + wert_02 kleiner ist als userwert_01 + userwert_02
Das einzige was ich als variable habe ist die user_id.
So mein Problem ist schonmal, wie spreche ich mehrer Tabellen gleichzeitig an?
Kann ich in einem SQL Query auch schon mit den Werten rechnen oder sollte ich einfach alle Werte auslesen und danach selektieren?
Was ist schneller, ein langer Query oder einen Berechnung in PHP?
So, mein Problem hab ich etwas vereinfacht, meine Berechnung sieht wesentlich komplexer aus, aber dann steigt man nicht gleich durch
und ich möchte ja auch das mir jemand hilft und nicht gleich schreiend davon rennt.
mfg
tobi
creyzee schreibt am 08.12.2007 um 08:54:53 Uhr
guten morgen,
ich glaube, da fehlen noch ein paar angaben. welche datentypen haben die felder der tabellen? gibt es primärschlüssel?
ich geh mal von folgendem aus:
tabelle 'daten'
daten_id .. long .. primärschl.
werte_id .. long .. primärschl.
daten_beschreibung .. text
tabelle 'werte'
daten_id .. long .. primärschl.
werte_id .. long .. primärschl.
wert_01 .. long
wert_02 .. long
tabelle 'user'
user_id .. long .. primärschl.
userwert_01 .. long
userwert_02 .. long
und die tabellen 'werte' und 'daten' sind verknüpft? also bestimmt über 'daten_id' und 'werte_id'
dann könnte die sql-abfrage wie folgt lauten:
"SELECT daten.* FROM [user], daten INNER JOIN werte ON (daten.werte_id = werte.werte_id) AND (daten.daten_id = werte.daten_id) WHERE ((([wert_01]+[wert_02])<([user_01]+[user_02])));"
wobei hier folgendes problem auftritt: die werte 'user_01' und 'user_02' kommen aus der tabelle 'user'. dort stehen bestimmt mehrere werte drin. die abfrage soll aber bestimmt nur für einen user ausgeführt werden, oder? wenn das der fall ist, solltes du die berechnung des terms '([user_01]+[user_02])' unter php ausführen. es gibt nämlich keine beziehung zwischen den tabellen 'daten'/'werte' und 'user'. Das könnte dann so aussehen:
"SELECT daten.* FROM daten INNER JOIN werte ON (daten.werte_id = werte.werte_id) AND (daten.daten_id = werte.daten_id) WHERE ((([wert_01]+[wert_02])<" & (user_01+user_02) & "));"
ich kenne zwar die genaue syntax unter php nicht, aber so würde das sql-statement aussehen.
bis denne, der creyzee
ich glaube, da fehlen noch ein paar angaben. welche datentypen haben die felder der tabellen? gibt es primärschlüssel?
ich geh mal von folgendem aus:
tabelle 'daten'
daten_id .. long .. primärschl.
werte_id .. long .. primärschl.
daten_beschreibung .. text
tabelle 'werte'
daten_id .. long .. primärschl.
werte_id .. long .. primärschl.
wert_01 .. long
wert_02 .. long
tabelle 'user'
user_id .. long .. primärschl.
userwert_01 .. long
userwert_02 .. long
und die tabellen 'werte' und 'daten' sind verknüpft? also bestimmt über 'daten_id' und 'werte_id'
dann könnte die sql-abfrage wie folgt lauten:
"SELECT daten.* FROM [user], daten INNER JOIN werte ON (daten.werte_id = werte.werte_id) AND (daten.daten_id = werte.daten_id) WHERE ((([wert_01]+[wert_02])<([user_01]+[user_02])));"
wobei hier folgendes problem auftritt: die werte 'user_01' und 'user_02' kommen aus der tabelle 'user'. dort stehen bestimmt mehrere werte drin. die abfrage soll aber bestimmt nur für einen user ausgeführt werden, oder? wenn das der fall ist, solltes du die berechnung des terms '([user_01]+[user_02])' unter php ausführen. es gibt nämlich keine beziehung zwischen den tabellen 'daten'/'werte' und 'user'. Das könnte dann so aussehen:
"SELECT daten.* FROM daten INNER JOIN werte ON (daten.werte_id = werte.werte_id) AND (daten.daten_id = werte.daten_id) WHERE ((([wert_01]+[wert_02])<" & (user_01+user_02) & "));"
ich kenne zwar die genaue syntax unter php nicht, aber so würde das sql-statement aussehen.
bis denne, der creyzee
WOW, also ich bin begeistert, wie schnell man hier eine fachlich kompetente Antwort erhält!!! In anderen Foren wird erstmal darüber abgestimmt ob man nur zu dumm ist und ober man einer Antwort würdig ist. Wirklich Cool!!!
Vielen Dank creyzee. INNER JOIN werde ich mir wohl im MySQL Handbuch mal genauer anschaun, werde es heute gleich mal testen!!!
mfg
Tobi
Vielen Dank creyzee. INNER JOIN werde ich mir wohl im MySQL Handbuch mal genauer anschaun, werde es heute gleich mal testen!!!
mfg
Tobi








58588schreibt am 08.12.2007 um 10:36:14 Uhr