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