Problem mit Abfragen über mehrere Tabellen

proloser

Erfahrenes Mitglied
Hallo,

ich habe "tabelle1" und "tabelle2":

tabelle1
- id
- budget

tabelle2
- b_id
- betrag

Tabelle 1:
id=1 Budget -> "10"

Tabelle 2:
b_id=1 Betrag -> 1
b_id=1 Betrag -> 3
b_id=1 Betrag -> 5
b_id=1 Betrag -> 1


Ich möchte alle Einträge aus Tabelle 1 anzeigen bei denen die Summe der Beträge aus Tabelle 2 unter dem Budget liegen.

Ich hab mir bereits die JOIN Funktionen angeschaut und sobald ich "SUM()" einbaue (um die Beträge der Tabelle 2 zusammen zu zählen) erhalte ich einen Fehler.

Mfg proloser
 
Funktioniert ...
Code:
select * from tabelle1, tabelle2 where tabelle1.budget > tabelle2.betrag

Ich möchte aber die Summe aller Beträge:
Funktioniert nicht mehr ...
Code:
select * from tabelle1, tabelle2 where tabelle1.budget > SUM(tabelle2.betrag)

Die verknüpfung tabelle1 -> id und tabelle 2 -> b_id hab ich zum testen weg gelassen ...

mfg proloser
 
Hi,

Funktioniert nicht mehr ...
Code:
select * from tabelle1, tabelle2 where tabelle1.budget > SUM(tabelle2.betrag)

Das dürfte eine "Invalid use of group function" Fehlermeldung ergeben, die Du das nächste Mal auch bitte postest.

kuddeldaddeldu hat gesagt.:
na dann erzähle uns auch, was Du versucht hast und mit welchen Ergebnissen.

Du bist doch jetzt lange genug dabei.

Diese Fehlermeldung sollte Dir doch sagen, dass in der Abfrage eine Gruppierung fehlt, ohne die Du an der Stelle nun mal keine Aggregationsfunktionen benutzen kannst. Und die Logik sollte Dir sagen, dass Du diese Betragssummen ja auch pro id berechnen musst.
Gruppiere also nach id und bau einen JOIN ein, ohne den das Ganze nämlich auch keinen Sinn ergibt.

LG
 
Du bist doch jetzt lange genug dabei.

Ich bin vll. lange genug dabei, trozdem habe ich noch nie mit JOINS gearbeitet. Ich denke Tutorials.de ist dafür da, um bei Problemen zu helfen, immerhin erwarte ich nicht damit man mir etwas fertig daer bringt sondern lediglich wie ich in die "einfache" Abfrage den JOIN einfüge.

mfg proloser
 
Ich hab es jetzt noch so versucht, allerdings bekomm ich den selben Fehler:

Code:
SELECT 
        a.* 
FROM 
        tabelle1 a 
JOIN 
        tabelle2 b 
ON  
        a.id = b.b_id 
WHERE 
        a.budget< SUM(b.betrag)

Fehler:
Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
 
Hi,

Ich bin vll. lange genug dabei, trozdem habe ich noch nie mit JOINS gearbeitet.

immer noch nicht?
Außerdem war das darauf bezogen, dass man Fehlermeldungen oder unerwartete Ergebnisse immer angibt. "Funktioniert nicht" war noch nie eine brauchbare Problembeschreibung.

Ich denke Tutorials.de ist dafür da, um bei Problemen zu helfen, immerhin erwarte ich nicht damit man mir etwas fertig daer bringt sondern lediglich wie ich in die "einfache" Abfrage den JOIN einfüge.

Das läuft aber auf eine fix-und-fertig Lösung hinaus, wenn Du offensichtlich die Tutorials, die ich Dir damals gepostet habe, nicht durchgearbeitet hast. Mitarbeit und Lernbereitschaft ist da schon Voraussetzung.
Jetzt machst Du halt erstmal nur einen JOIN der beiden Tabellen, danach fügst Du die Gruppierung ein und dann schränkst Du das auf Deine Bedingung ein.

LG
 
Hi,

Ich hab es jetzt noch so versucht, allerdings bekomm ich den selben Fehler:

da ist ja auch immer noch keine Gruppierung drin.

kuddeldaddeldu hat gesagt.:
Diese Fehlermeldung sollte Dir doch sagen, dass in der Abfrage eine Gruppierung fehlt, ohne die Du an der Stelle nun mal keine Aggregationsfunktionen benutzen kannst. Und die Logik sollte Dir sagen, dass Du diese Betragssummen ja auch pro id berechnen musst.

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...

In solchen Fällen lässt man sich übrigens die MySQL-Fehlermeldung mit [phpf]mysql_error[/phpf] ausgeben.

LG
 
Code:
 SELECT 
        a.* 
FROM 
        tabelle1 a 
JOIN 
        tabelle2 b 
ON  
        a.id = b.b_id 
WHERE 
        a.budget < b.betrag
GROUP BY 
        b_id

Und wie kann ich jetzt die Summe der beträge errechnen?
 
So klappts auch nicht:

Code:
  SELECT 
        a.*, b.*, SUM(b.betrag) AS summe
FROM 
        tabelle1 a 
JOIN 
        tabelle2 b 
ON  
        a.id = b.b_id 
WHERE 
        a.budget < summe
GROUP BY 
        b.b_id

Wo darf ich "SUM()" verwenden? Ohne Join funktionierts ja auch so ....
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück