Anzahl der Vorkommen - innerhalb einer Abfrage?
Anzahl der Vorkommen - innerhalb einer Abfrage?
am 15.10.2006 23:26:31 von Sebastian Suchanek
Hallo NG!
Ich stehe gerade etwas auf dem Schlauch - kann mir 'mal jemand
'runterhelfen? ;-)
Ich habe folgende Abfrage:
| SELECT t.id, tag_de AS tag
| FROM crosslink_tags cl
| LEFT JOIN tags t ON t.id = cl.tag
| WHERE cl.model = $id GROUP BY t.id
(Das Prinzip dürfte klar sein: "crosslink_tags" dient zum Aufbau
einer n:m-Verknüpfung zwischen Tags aus "tags" und einer
weiteren Tabelle.
Diese Abfrage würde ich jetzt gerne noch um eine Spalte
erweitern, in der steht, wie oft ein Tag in der *gesamten*
Tabelle "crosslink_tags" vorkommt, damit ich danach (=Relevanz)
sortieren kann.
TIA,
Sebastian
--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de
Re: Anzahl der Vorkommen - innerhalb einer Abfrage?
am 16.10.2006 03:32:59 von Thomas Rachel
Sebastian Suchanek wrote:
> | SELECT t.id, tag_de AS tag
> | FROM crosslink_tags cl
> | LEFT JOIN tags t ON t.id = cl.tag
> | WHERE cl.model = $id GROUP BY t.id
>
> Diese Abfrage würde ich jetzt gerne noch um eine Spalte
> erweitern, in der steht, wie oft ein Tag in der *gesamten*
> Tabelle "crosslink_tags" vorkommt, damit ich danach (=Relevanz)
> sortieren kann.
count(*) bzw. count(t.id) (ungetestet)
Thomas
--
Trolle sind vergleichbar mit präpubertären Jungs, die in Unterwäsche in
die Betstunde eines Nonnenklosters platzen und lautstark fragen, ob der
Slip einer der anwesenden Damen gehöre.
(Cheatah in dnq: <9dgb35.90.1@hadie403.hadiko.de>)
Re: Anzahl der Vorkommen - innerhalb einer Abfrage?
am 16.10.2006 11:04:02 von Sebastian Suchanek
Thomas Rachel schrieb:
> Sebastian Suchanek wrote:
>
>> | SELECT t.id, tag_de AS tag
>> | FROM crosslink_tags cl
>> | LEFT JOIN tags t ON t.id = cl.tag
>> | WHERE cl.model = $id GROUP BY t.id
>>
>> Diese Abfrage würde ich jetzt gerne noch um eine Spalte
>> erweitern, in der steht, wie oft ein Tag in der *gesamten*
>> Tabelle "crosslink_tags" vorkommt, damit ich danach (=Relevanz)
>> sortieren kann.
>
> count(*) bzw. count(t.id) (ungetestet)
Nein, eben nicht. (Soweit war ich gestern auch schon. ;-))
| SELECT t.id, tag_de AS tag, COUNT(t.id) AS weight
| FROM crosslink_tags cl
| LEFT JOIN tags t ON t.id = cl.tag
| WHERE cl.model = 40 GROUP BY t.id
liefert (auch bei COUNT(*) statt COUNT(t.id)) stur "1" in der
weight-Spalte - offensichtlich wird da nur das Vorkommen der Tags
"innerhalb" der WHERE-Bedingung gezählt und nicht "global".
Ich sehe gerade, daà es bei Weglassen der WHERE-Bedingung
funktioniert - also muà wohl ein Subquery her...
Tschüs,
Sebastian
Re: Anzahl der Vorkommen - innerhalb einer Abfrage?
am 16.10.2006 13:14:14 von Martin Kaffanke
Am Mon, 16 Oct 2006 11:04:02 +0200 schrieb Sebastian Suchanek:
> Thomas Rachel schrieb:
>> Sebastian Suchanek wrote:
>>
>>> | SELECT t.id, tag_de AS tag
>>> | FROM crosslink_tags cl
>>> | LEFT JOIN tags t ON t.id = cl.tag
>>> | WHERE cl.model = $id GROUP BY t.id
>>>
>>> Diese Abfrage würde ich jetzt gerne noch um eine Spalte
>>> erweitern, in der steht, wie oft ein Tag in der *gesamten*
>>> Tabelle "crosslink_tags" vorkommt, damit ich danach (=Relevanz)
>>> sortieren kann.
>>
>> count(*) bzw. count(t.id) (ungetestet)
>
> Nein, eben nicht. (Soweit war ich gestern auch schon. ;-))
>
> | SELECT t.id, tag_de AS tag, COUNT(t.id) AS weight
> | FROM crosslink_tags cl
> | LEFT JOIN tags t ON t.id = cl.tag
> | WHERE cl.model = 40 GROUP BY t.id
>
> liefert (auch bei COUNT(*) statt COUNT(t.id)) stur "1" in der
> weight-Spalte - offensichtlich wird da nur das Vorkommen der Tags
> "innerhalb" der WHERE-Bedingung gezählt und nicht "global".
>
> Ich sehe gerade, daà es bei Weglassen der WHERE-Bedingung
> funktioniert - also muà wohl ein Subquery her...
Ich hatte auch mal so ein Problem, da lag das irgendwie an der GROUP BY
Bedingung. Ich weià aber nicht mehr wie ich es gelöst habe, vielleicht
habe ich eine Spalte gezählt, die nicht im Group by vorkommt. Oder
ich habe es über SQL_CALC_FOUND_ROWS gelöst.
Naja, sind nur DenkanstöÃe, weià nicht ob's weiterhilft.
Re: Anzahl der Vorkommen - innerhalb einer Abfrage?
am 16.10.2006 15:07:42 von Steffen Mosthaf
Sebastian Suchanek wrote:
> Hallo NG!
>
> Ich stehe gerade etwas auf dem Schlauch - kann mir 'mal jemand
> 'runterhelfen? ;-)
> Ich habe folgende Abfrage:
>
> | SELECT t.id, tag_de AS tag
> | FROM crosslink_tags cl
> | LEFT JOIN tags t ON t.id = cl.tag
> | WHERE cl.model = $id GROUP BY t.id
>
> (Das Prinzip dürfte klar sein: "crosslink_tags" dient zum Aufbau
> einer n:m-Verknüpfung zwischen Tags aus "tags" und einer
> weiteren Tabelle.
>
> Diese Abfrage würde ich jetzt gerne noch um eine Spalte
> erweitern, in der steht, wie oft ein Tag in der *gesamten*
> Tabelle "crosslink_tags" vorkommt, damit ich danach (=Relevanz)
> sortieren kann.
>
>
> TIA,
> Sebastian
Mit Subquery so _vielleicht_
SELECT t.id, tag_de AS tag,
(SELECT count(cl2.tag)
FROM crosslink_tags cl2.tag
WHERE tag_de = cl2.tag) AS summeRelevanz
FROM crosslink_tags cl
LEFT JOIN tags t ON t.id = cl.tag
WHERE cl.model = $id GROUP BY t.id
Gruß
Steffen
--
(o_ | PGP-Key-ID: 0x80F9C604
//\ | ICQ: 116609337
V_/_ | registered Linux User #215802 @ http://counter.li.org
LINUX, weils Betriebssystem eben ned wurscht ist!
Re: Anzahl der Vorkommen - innerhalb einer Abfrage?
am 04.12.2006 10:43:15 von jf
Hallo Sebastian,
ich hatte ein ähnliches Problem, schließlich hat es so funktioniert:
SELECT BLOG.ID, BLOG.DATUM_AB, BLOG.TEXT, COUNT(BLOG_KOMMENTAR.ID) AS
ANZAHL
FROM BLOG LEFT JOIN BLOG_KOMMENTAR ON (BLOG.ID=3DBLOG_KOMMENTAR.BLOG_ID)
WHERE BLOG.DATUM_AB<=3DSYSDATE()
GROUP BY BLOG.DATUM_AB, BLOG.TEXT ORDER BY BLOG.DATUM_AB DESC
Vielleicht hilft dir dieses Beispiel
Gruß
Jörg
On Oct 15, 10:26 pm, Sebastian Suchanek
wrote:
> Hallo NG!
>
> Ich stehe gerade etwas auf dem Schlauch - kann mir 'mal jemand
> 'runterhelfen? ;-)
> Ich habe folgende Abfrage:
>
> | SELECT t.id, tag_de AS tag
> | FROM crosslink_tags cl
> | LEFT JOIN tags t ON t.id =3D cl.tag
> | WHERE cl.model =3D $id GROUP BY t.id
>
> (Das Prinzip dürfte klar sein: "crosslink_tags" dient zum Aufbau
> einer n:m-Verknüpfung zwischen Tags aus "tags" und einer
> weiteren Tabelle.
>
> Diese Abfrage würde ich jetzt gerne noch um eine Spalte
> erweitern, in der steht, wie oft ein Tag in der *gesamten*
> Tabelle "crosslink_tags" vorkommt, damit ich danach (=3DRelevanz)
> sortieren kann.
>
> TIA,
>
> Sebastian
>
> --http://www.baumaschinen-modelle.nethttp://www.schwerlast-r hein-main.de