Gå til innhold

Hente info fra én tabell, telle fra en annen


Anbefalte innlegg

Hei,

 

Holder på med et miniforum til et lite CMS. I den anledning vil jeg liste opp kategorier fra fcat, og telle antall topics i ftop som har tilsvarende verdi i kolonnen fcat. Med andre ord: telle hvor mange emner det er i kategorien.

 

Hver rad i fcat (kategorier) har en kolonne id. Hver rad i ftop (emner) har en kolonne fcat som viser hvilken kategori emnet hører hjemme i.

 

Er dette mulig å gjøre i én spørring? Hvis ikke: er det mulig å gjøre det i to spørringer, altså ikke én for _hver_ kategori?

 

Takker for svar. :)

Lenke til kommentar
Videoannonse
Annonse

Det er lenge siden jeg har holdt på med SQL, men er ikke dette en enkel kombinert spørring da (litt usikker på om jeg forstod deg rett)?

 

Noe ala min rustne kvasikode:

Select count(ftopID) from ftop 
where fcat = (
 select fcatID from fcat 
 where fcatID = whatever
);

 

Hvis dette virker i nærheten av smart så slå opp SQL subqueries :)

Lenke til kommentar

Hmmmmmmm. Med det queriet må man vel kjøre et query per kategori man vil finne antallet emner i?

 

Fant en annen, litt halvveis, løsning. Legger her til at jeg også vil ha antall svar i kategorien. Tror jeg må finne meg en bok eller noe om mySQL...

 

SELECT russ_fcat.name , 
COUNT( russ_fpost.id) AS posts, 
COUNT( russ_ftop.id) AS topics
FROM russ_fcat LEFT JOIN russ_ftop ON russ_fcat.id = russ_ftop.fcat
LEFT JOIN russ_fpost ON russ_ftop.id = russ_fpost.ftop
GROUP BY russ_fcat.id

 

Dette gir at antall topics er [antall posts + antall topics] i kategorien. Å regne ut antall topics gjør jeg så ved å subtrahere.. Ikke noe optimal løsning, men queryet kjører kjapt. Jeg får heller eventuelt endre det om jeg finner en annen løsning senere.

 

Takk skarru ha, Jørgen!

Endret av Mikael Berg
Lenke til kommentar

Dette bør da være mulig uten å måtte kjøre teite joins?

 

SELECT c.name, count(p.id) AS posts, count(t.id) AS topics FROM russ_fcat c, russ_fpost p, russ_ftop t WHERE c.id = t.fcat AND t.id = p.ftop GROUP BY c.id

 

Har ikke testet koden, men mener at dette vil være en raskere og mer effektiv løsning. Om det er mulig å gjøre noe uten joins, gjør jeg det uten joins. :)

Lenke til kommentar

Hm, jorgis.

 

Den koden returnerer

name:russerevy /* navnet på første kategori*/
posts: 13 /* stemmer */
topics: 3 /* det er 4 topics i kategori 1. To har samme navn (men ikke id) */

 

Jeg skulle hatt alle de forskjellige kategoriene, og tilhørende postcount og topiccount som kolonner...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...