Autor |
Nachricht |
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Do 20.12.2007 15:13
Titel SQL mal wieder |
|
|
Moin.
Nehmen wir mal Folgendes (zur Vereinfachung) an:
Code: |
Tabelle User mit Spalte id
Tabelle Foto mit Spalte iduser (also User.id) (1:n)
Tabelle Text mit Spalte id, iduser (also User.id) (1:n)
Tabelle Sign mit Spalte idtext (also Text.id) (1:n)
|
Jetzt will ich herausfinden, wieviele Fotos und wieviele Texte zu einem User gespeichert wurden und auch
noch gleich, wie viele Signatures an den jeweiligen Texten dranhängen.
Geht das in einem einzigen Statement?
Code: |
SELECT u.id, f.iduser, t.iduser, s.idtext FROM user AS u
LEFT JOIN foto AS f ON u.id = f.iduser
LEFT JOIN text AS t ON u.id = t.iduser
LEFT JOIN sign AS s ON t.id = s.idtext
WHERE u.id = 1
|
So könnte ich das was zurückgegeben wird natürlich in einer Schleife verarbeiten.
Ist aber umständlich. Geht das eleganter mit count() und GROUP BY ?
Irgendwie steh ich gerade auf dem Schlauch. Bin auf keine funktionierende Lösung gekommen.[/code]
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Do 20.12.2007 15:32
Titel
|
|
|
zeig mal auch bitte die restlichen spalten deiner tabelle... will mal sehen, was man counten könnte
|
|
|
|
|
Anzeige
|
|
|
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Do 20.12.2007 15:38
Titel
|
|
|
häh?
Das habbich jetzt nich kapiert.
Du kannst doch jede beliebige Spalte counten ...
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Do 20.12.2007 16:13
Titel
|
|
|
GUCK MICH NICHT SO AN!!!!!!!
ich wollte ein wenig mehr zusammenhang haben... konkret wollte ich wissen, ob du schlauerweise auch bei der sign die direkte verbindung zur user-id hast, oder ob du immer einen umweg über die text-tabelle gehen musst... was ich ungünstig fänd...
edit: kleines ups am rande hatte "und auch noch gleich, wie viele Signatures an den jeweiligen Texten dranhängen. " überlesen... kannst mich also doch so angucken... aber nur KURZ!!!!
Zuletzt bearbeitet von pixelpapst303 am Do 20.12.2007 16:15, insgesamt 1-mal bearbeitet
|
|
|
|
|
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Do 20.12.2007 16:48
Titel
|
|
|
Okay.
Nachdem Du ja jetzt den Durchblick hast,
hast Du auch ne Lösung?
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Do 20.12.2007 17:21
Titel
|
|
|
leider nicht, ohne ein wenig zu testen.... und adfür gerade ein wenig zu wenig zeit...
habs noch nie probiert, aber nachdem ich nachgeschaut habe, ist ein einfaches count() in nem join statement scheinbar nicht möglich, oder?
sonst wäre mein rein theoretischer ansatz sowas gewesen (kann nu auch völliger bullshit sein)
Code: |
SELECT count(u.id) as userz, count(f.iduser) as fotoz, count(t.iduser) as textz FROM user AS u, foto as f, text as t
LEFT JOIN count(sign) AS s ON t.id = s.idtext
WHERE u.id = 1 AND f.iduser = 1 AND t.iduser = 1
|
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 20.12.2007 20:14
Titel
|
|
|
pixelpapst303 hat geschrieben: | st ein einfaches count() in nem join statement scheinbar nicht möglich, oder? |
Zitat: | SELECT
count(t1.id),
t1.spalte,
t2.id,
t2.spalte
FROM
t1
LEFT JOIN
t2
ON
t1.id = t2.id
WHERE
Bedingung = erfüllt
GROUP BY
t1.id |
In Verbindung mit GROUP BY
|
|
|
|
|
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Fr 21.12.2007 09:42
Titel
|
|
|
Code: | SELECT count(t1.id), t1.spalte, t2.id, t2.spalte
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE Bedingung = erfüllt
GROUP BY
t1.id |
Jaa, nee
Wäre schön, wenns so einfach wäre.
Aber wie gesagt, ich hab bei mir ja ne zweistufige Referenz drin.
Code: | Tabelle User mit Spalte id
Tabelle Foto mit Spalte iduser (also User.id) (1:n)
Tabelle Text mit Spalte id, iduser (also User.id) (1:n)
Tabelle Sign mit Spalte idtext (also Text.id) (1:n) |
Hier sieht man:
Code: |
Sign.idtext -> Text.id und Text.iduser -> User.id
|
Und sowohl im ersten wie im zweiten Fall hat man einen 1:n (eigentlich n:1, oder?) Fall.
Wenn ich da auf User.id count() und group by mach, dann kommt da nix ordentliches bei raus.
Würde ich so wie von pixelpapst vorgeschlagen alle entsprechenden Spalten in ein count() setzen wollen,
dann müsste ich auch für jede Spalte ein group by machen. Und das ergibt dann wieder totalen Käse.
Die einzige Möglichkeit wäre wohl so was:
Code: |
SELECT u.id,
(SELECT count(f.iduser) FROM foto AS f WHERE iduser=u.id),
(SELECT count(t.iduser) FROM text AS t. WHERE iduser=u.id)
(SELECT count(s.idtext) FROM user AS u WHERE idtext=t.id)
WHERE u.id = 1
|
Das scheint tatsächlich brauchbare Ergebnisse zu liefern. In die Richtung werde ich mal ausführlicher testen.
Danke für eure Bemühungen!
|
|
|
|
|
|
|
|