MySQL joins og subqurys

Tags:    databaser

Er kommet frem til denne sql sætning hvor jeg får valgt de medlemmer der har skrevet et postnummer indenfor den angivne region (syddanmark)
Nu skal jeg så have flettet det sammen med den liste af kategorier som jeg har i en anden tabel, disse kategorier skal listes og så skal den tælle hvor mange medlemmer der er i hver kategori som samtidig også har et postnummer indenfor den angivne region.

Kan ikke rigtig se hvordan jeg skal kunne gøre det uden at starte med SELECT kategorier ogsp GROUP BY kategorier eller vil den jo sortere de kategorier fra som ikke har nogen medlemmer.

Har prøvet at lave den med LEFT JOIN's for de forskellige tabeller, men stødte på problemer hele tiden med at den begyndte at sortere katgorierne fra, så gætter på dette ikke er vejen at gå?

Meningen er i sidste ende at jeg har 3 kolonner en med kategori id'erne, en med kategorierne og en med antal medlemmer i hver kategori, dette skal så udskrives i PHP til en dropdown boks som lister kategorierne og skriver antallet af medlemmer i parantes efter kategorien og id'et skal indsættes som value på de forskellige options inde i dropdown boksen.

Håber i har nogle gode forslag =)

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.04.2010 11:19 af Bruger #11269
8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hvad med denne?

Fold kodeboks ind/udSQL kode 




flyspeed sku være god til query joins



Er kommet frem til denne query, nu skal jeg så bare have en måde jeg kan få count(member_id) med ind i billedet

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.04.2010 12:38 af Bruger #11269
Det er knap så nemt som den der, problemet ligger i jeg har en tabel med medlemmer som blandt andet har id for hovedkategori, underkategori og et postnr

For at finde frem til hvad region det postnr er i har jeg en tabel over alle postnr i danmark
så har jeg en tabel over alle kommuner i danmark
og sidst en tabel over alle regioner i danmark
måden du finder frem til det på er ved at tage kommune id fra postnr tabellen og joine med id fra kommune tabellen som så joiner region id fra kommune tabellen til id fra region tabellen på den måde ender du med id'et på den region postnr'et er i.
For at finde ud af hvad kategori det er skal man sammenligne hovedkategori id og underkategori id fra medlems tabellen
og sammenligne med hovedkategori tabellen og underkategori tabellen for så at ende op med kategori navnet hvor begge id passer.

Nu har man så navn på kategori og id på region, det skal så sortere de medlemmer fra som ikke har denne kategori og et postnr i denne region

resultatet skal så være noget alla dette:
--------------------------
|Kategori |antal medlemmer|
|Motorsport |5
|Til vands |2
|I luften |1
|Motorcykel |4



flyspeed sku være god til query joins


hmm det har jeg aldrig hørt om det vil jeg lige kikke nærmere på



Skriv dit tabel design her (gerne init. SQL til at oprette tabellerne), og fortæl hvad du præcis vil have af resultat - så kigger jeg nærmere på det. Det er svært uden tabeller og en præcis beskrivelse af det resultat du vil have. :)



Skriv dit tabel design her (gerne init. SQL til at oprette tabellerne), og fortæl hvad du præcis vil have af resultat - så kigger jeg nærmere på det. Det er svært uden tabeller og en præcis beskrivelse af det resultat du vil have. :)


Jeg har lagt sql filen med hele databasen ud på min server du kan hente den her:
http://rune.wi11.ots.dk/database.sql.zip

Slut resultatet skal være jeg har listet underkategorierne som har hovedkategori 2 foreksempel

ud for hver af de kategorier skal der være en count som tæller antal medlemmer som har den pågældende kategori men som også har et postnr som eksistere i foreksempel region syddanmark

ideen er så at region og kategori jo skal være alt efter hvad der bliver søgt på men den del skal jeg klare selv, har bare problemer med at finde frem til den rigtige måde at trække dataerne ud fra min database.

Jeg har allerede lavet en som henter alle kategorier og tæller antal medlemmer i hver kategori uden at sortere postnr den ser sådan her ud:
(hvor id foreksempel er 11)
Fold kodeboks ind/udKode 

også har jeg en som trækker regioner ud og tæller hvor mange medlemmer der er i hver region
den ser sådan her ud:
Fold kodeboks ind/udKode 

Disse 2 querys bliver skrevet ud til 2 select bokse, meningen er så at man skal kunne vælge en værdi i en af de 2 bokse og så vil den med AJAX opdatere antal medlemmer i hver del, ved (hvis man har valgt en underkategori) sortere antal medlemmer i regioner som kun har den bestemte underkategori eller hvis man har valgt en region sorterer antal medlemmer i underkategorier som kun har den bestemte region

Det færdige resultat fra sql'en skulle gerne se sådan her ud:

id(fra underkategorier tabellen)
kategorier (fra underkategorier tabellen)
count(member_id) (fra members tabellen)

foreksempel:
id | kategori | count

3 Motorsport 3
5 Til vands 0
7 Sejlads 5
9 I luften 0

Link til siden her hvis det hjælper dig til at forstå hvordan det hænger sammen:
http://rune.wi11.ots.dk/soege_portal/
der er 3 select bokse på forsiden det er disse jeg arbejder med



Indlæg senest redigeret d. 03.04.2010 11:46 af Bruger #11269
Har løst det selv, query endte sådan her:
Fold kodeboks ind/udKode 


Den er ikke nem at se logik i databasen men når man det bliver ud i sidste ende med kategori id og navn og antal medlemmer i hver kategori passer den godt nok.



t