Permalänk
Medlem

SQL-fråga relationsdatabas.

Hej

Jag har tre tabeller i en relationsdatabas. Vad jag vill är att hämta antalet taggar en speciell person har skrivit inom varje ämne.

Select ta.id, ta.namn, (select count(*) from [art-tag-rel] atr where atr.[text-id] = ta.id) as antal from taggar ta.

Denna kod ger mig antalet taggar som ALLA personer har skrivit. Personernas id finns lagrade i texter.vem.

art-tag-rel är en relationstabell med två fält:
artikel-id : motsvarande texter.id
tagg-id : motsvarande taggar.id.

Hur ska jag göra detta?

Tack på förhand.

Permalänk
Medlem

SELECT COUNT(ta.id) as antal FROM taggar ta WHERE ta.namn = 'Kalle'

gör vad jag tror att du vill att det ska göra.

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem

Lägger en fråga jag har här om det går för sig.

Vad drar mest resurser

$res = mysql_query("SELECT * FROM db"); $count = mysql_num_rows($res); echo $count;

eller

$res = mysql_query("SELECT COUNT(*) AS num FROM db"); $count = mysql_fetch_array($res); echo $count['num'];

Permalänk
Medlem

den första, rimligtvis.

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem

Okej. Tack för det snabba svaret. Kunde vara intressant med anledningen ochså.

Permalänk
Medlem

databassystemet räknar ju i stort sett redan det du får ut ur den. att göra det igen sen i php bör ju då rimligen vara dubbelt arbete. databasen bör rimligen också vara ruskigt mycket mer optimerad på dylika operationer.

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem

SELECT COUNT(ta.id) as antal
FROM taggar ta
WHERE ta.namn = 'Kalle'

Hjälper mig tyvärr inte efterso taggar bara innehåller namnen på taggar. Det är en form av relationsdatabas där art-tag-rel innehåller antalet taggar

Därför den ser ut som ovan eftersom den kopplar samman nyheterna med taggarna. Det är där det knepar sig för mig som är sqloduglig.

Permalänk
Medlem

berätta var en speciell persons unika identifierare kommer in i bilden då. artikel? så här då?:

SELECT COUNT(ta.id) as antal FROM taggar ta, artikel art, art-tag-rel m2m WHERE art.författarfält = 'Kalle' AND ta.id = m2m.tagg-id AND art.id = m2m.texter-id

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem

funkar inte riktigt

min kod ser ut såhär:

Select ta.id, ta.namn, (Select Count([tagg-id]) from [art-tag-rel] atr Where atr.[tagg-id]=ta.id) as antal from taggar ta, texter te, [art-tag-rel] atr where ta.niva=0 and atr.[artikel-id]=te.id and te.vem=ett nummer

vill ha ut: taggarnas id, taggarnas namn, antalet träffar i art-tag-rel på varje specifik tag. Allt detta för en specifik person med id i texter.vem.

Länken ser ut såhär:

texter.vem -> texter.id -> art-tag-rel.text.id -> art-tag-rel.tagg-id -> taggar.id -> taggar.namn.

Typ.

Just nu returnerar den tyvärr, med koden ovan, en rad per träff och den tar kosntigt nog inte hänsyn till personen alls.

exempel:
* Nyheter (2st)
* Nyheter (2st)
* Texter (6st)
* Texter (6st)
* Texter (6st)
* Texter (6st)
* Texter (6st)
* Texter (6st)
* Bloggar (5st)
* Bloggar (5st)
* Bloggar (5st)
* Bloggar (5st)
* Bloggar (5st)

när den borde ge:
* Nyheter (2st)
* Texter (6st)
* Bloggar (5st)

Permalänk
Medlem

Testa att gruppera

Visa signatur

Last FM - Slappis.Net - Petterssons.Org - Årets idiot 2004

Botten upp, resten i håret!

Bahnhof 100/100/Mb/s villafiber

Permalänk
Medlem

fick ett error då... konstigt nog. lade bara till group by ta.id på slutet. borde vara rätt.

hur som heslt ger:

Select id, namn, (Select Count(*) from [art-tag-rel] atr Where atr.[tagg-id]=taggar.id) as antal from taggar

Rätt resultat fast inte personspecifikt utan för atlla medlemmar. Detta får mig att tro att det är fel på logiken ovan. Jag borde, 'ven utan group, kunna få ut rätt resultat. eller?

Permalänk
Medlem

Jag har för mig att man ska använda SQL så mycket som möjligt, och inte använda PHPs alla inbyggda funktioner såsom mysql_num_rows, då, som kode säger, att databasen är mycket snabbare på att göra sånt (PHP måste ju troligen hämta dom där raderna igen med liknande queries, fast internt i funktionen).

Permalänk
Medlem

Nu är tråden ltie splittrad. Håll er till topic tack. Ja, sql i första hand stämmer.

Jag löste det med följande kod, men den är nog inte optimal:

Select distinct ta.id, ta.namn, (Select Count([tagg-id]) from [art-tag-rel] atr Where atr.[tagg-id]=ta.id) as antal from taggar ta, texter te, [art-tag-rel] atr where ta.niva=0 and atr.[tagg-id]=ta.id and atr.[artikel-id]=te.id and te.vem=idnummer på person