Existieren Einträge in einer Relation?
Maximilian Gartner
- datenbank
Hallo Zusammen,
sicherlich einfaches Problem für Blicker:
ich habe zwei Tabellen, user & userRelations
Stark vereinfacht:
user: id | nickname
userRelation: user1_id | user2_id
In der user-Tabelle stehen dann die Einträge so drin:
1 | nina
2 | stefan
3 | maximilian
In der userRelations-Tabelle solche
1 | 2 (nina mag stefan)
1 | 3 (nina maximilian)
Jetzt möchte ich eine Query absetzen, die mir die Userdaten ausliest und in einer Spalte speichert, ob es Einträge in der userRelations-Tabelle gibt und wenn ja, wieviele.
Ich habe es so versucht:
SELECT u.*, ur.*
FROM user AS u, userRelations AS ur
WHERE u.id = ur.user1_id
AND u.id = 1
Das liefert mir aber zwei Ergebniszeilen, statt nur einer. Ich möchte im Prinzip dieses Ergebnis:
id | nickname | numRelations
1 | nina | 2
Hat jemand eine Idee, wie es richtig geht?
Danke und Grüße,
Maxi
Moin Maximilian Gartner!
versuch doch mal mit COUNT(ur.user1_id) AS zahl. Das müsste dir zusammen mit deinen where-Klauseln die Anzahl der entsprechenden Verbindungen geben.
tschüssi
ichen
Danke ichen,
ich habe es jetzt über Sub-Selects gelöst. Die Query ist in Wirklichkeit noch viel komplexer und auch über LEFT JOINs hätte es nicht funktioniert :)
Grüße,
Maxi
Hallo Maxi,
ich habe es jetzt über Sub-Selects gelöst. Die Query ist in Wirklichkeit noch viel komplexer und auch über LEFT JOINs hätte es nicht funktioniert :)
Rouven mag Subselects, ihm würde möglicherweise Deine Lösung gefallen, die Du gerne hier posten könntest, damit jemand mit dem gleichen Problem auch eine Antwort finden kann. Allerdings sollte nach Deinem Ausgangsposting
SELECT
u.id,
u.nickname,
COUNT (ur.user1_id) numRelations -- countRelations wäre sinnvoller :-)
FROM user u LEFT JOIN userRelations ur
ON u.id = ur.user1_id
GROUP BY -- da über eine der selektierten Spalten aggregiert wird
u.id, -- muss nach allen anderen Spalten gruppiert werden, was
u.nickname -- hier ganz genau das richtige Ergebnis liefert.
-- und für nicht aufgeführte den Wert 0
das von Dir gewünschte Ergebnis liefern. Allzu kompliziert ist das meiner Meinung nach auch nicht - und sicher das, was dedlfix bei seinem Tipp vor Augen hatte.
Freundliche Grüße
Vinzenz
echo $begrüßung;
Jetzt möchte ich eine Query absetzen, die mir die Userdaten ausliest und in einer Spalte speichert, ob es Einträge in der userRelations-Tabelle gibt und wenn ja, wieviele.
"wenn ja, wieviele" wäre also ein Zählen, bei dem das Ergebnis entweder 0 oder größer als 0 ist.
SELECT u.*, ur.*
FROM user AS u, userRelations AS ur
WHERE u.id = ur.user1_id
AND u.id = 1Das liefert mir aber zwei Ergebniszeilen, statt nur einer. Ich möchte im Prinzip dieses Ergebnis:
Du hast damit ein kartesisches[*] Produkt ermittelt. Jede Ergebniszeile von A wird mit jeder Ergebniszeile von B verknüpft. Gibt es mindestens in einer von beiden Tabellen keine Daten werden zu dieser Verknüpfung keine Ergebniszeilen produziert.
Hat jemand eine Idee, wie es richtig geht?
Du suchst einen LEFT JOIN. Es gibt zwei Artikel, die sich mit dem richtigen Joinen beschäftigen. Siehe http://aktuell.de.selfhtml.org/artikel/datenbanken/index.htm
echo "$verabschiedung $name";
[*] benannt nach René Descartes/Renatus Cartesius