Gruppe (gruppeid,gruppenavn,gruppebeskrivelse,gruppesynlig,sprogid)
Nyheden kan tilhøre flere gruppe og flere kategorier.
Jeg skal nu have udtrukket følgende:
- Alle nyheder fra en bestemt gruppe - Nyheden,gruppen og kategorien er sat til synlig - Kategorierne skal være forskellig fra en bestemt kategori. - nyheden skal sorteres efter den sidste dato først -for at begrænse mængden af data skal der kun hentes nyhedid,seasonid,nyhedsynlig,nyheddatotid,nyhedoverskrift samt nyhedresume fra nyheder.
Nedenstående SQL sætning henter fint de rigtige nyheder ud (ikke den bedste sql sætning – ved det), men hvis en nyhed tilhøre flere kategorier, bliver den udskrevet 2 fange – HVORDAN UNDGÅR JEG DET? – nyhederne skal på en eller anden måde grouperes efter nyhedid?
SELECT TOP 3 nyhed.nyhedid,nyhed.seasonid,nyhed.nyhedsynlig,nyhed.nyheddatotid,nyhed.nyhedoverskrift,nyhed.nyhedresume,nyhed_gruppe.*,gruppe.*,nyhed_kategori.*,kategori.* FROM nyhed,nyhed_gruppe,gruppe,nyhed_kategori,kategori WHERE nyhed.nyhedid = nyhed_gruppe.nyhedid AND nyhed_gruppe.gruppeid = gruppe.gruppeid AND nyhed.nyhedid = nyhed_kategori.nyhedid AND nyhed_kategori.katid = kategori.katid AND nyhed.nyhedsynlig=1 AND gruppe.gruppesynlig=1 AND kategori.katsynlig=1 AND gruppe.gruppeid=1 AND kategori.katid<>64 AND kategori.katid<>71 ORDER BY nyheddatotid DESC ;
Den er komplet "SELECT TOP 3 nyhed.nyhedid,nyhed.seasonid,nyhed.nyhedsynlig,nyhed.nyheddatotid,nyhed.nyhedoverskrift,nyhed.nyhedresume,nyhed_gruppe.*,gruppe.*,nyhed_kategori.*,kategori.* FROM nyhed,nyhed_gruppe,gruppe,nyhed_kategori,kategori WHERE nyhed.nyhedid = nyhed_gruppe.nyhedid AND nyhed_gruppe.gruppeid = gruppe.gruppeid AND nyhed.nyhedid = nyhed_kategori.nyhedid AND nyhed_kategori.katid = kategori.katid AND nyhed.nyhedsynlig=1 AND gruppe.gruppesynlig=1 AND kategori.katsynlig=1 AND gruppe.gruppeid=1 AND kategori.katid<>64 AND kategori.katid<>71 ORDER BY nyheddatotid DESC ;"
SELECT TOP 3 nyhed.nyhedid, nyhed.seasonid, nyhed.nyhedsynlig, nyhed.nyheddatotid, nyhed.nyhedoverskrift, nyhed.nyhedresume, nyhed_gruppe.*, gruppe.*, nyhed_kategori.*,kategori.* FROM nyhed,nyhed_gruppe,gruppe,nyhed_kategori,kategori WHERE nyhed.nyhedid = nyhed_gruppe.nyhedid AND nyhed_gruppe.gruppeid = gruppe.gruppeid AND nyhed.nyhedid = nyhed_kategori.nyhedid AND nyhed_kategori.katid = kategori.katid AND nyhed.nyhedsynlig=1 AND gruppe.gruppesynlig=1 AND kategori.katsynlig=1 AND gruppe.gruppeid=1 AND kategori.katid<>64 AND kategori.katid<>71 ORDER BY nyheddatotid DESC ;
Ok, der tror jeg du har fejlen. Du vælger nyhed_kategori.* og kategori.* Så skal den vel også give 2 stk nyhed_id da nyheden står 2 gange i nyhed_kategori.* lader du være med at vælge felterne men kun bruger dem i "where" sætningene, kan du smide et distinct ind. F.eks:
SELECT TOP 3 distinct nyhed.nyhedid, nyhed.seasonid, nyhed.nyhedsynlig, nyhed.nyheddatotid, nyhed.nyhedoverskrift, nyhed.nyhedresume, nyhed_gruppe.*, gruppe.* FROM nyhed,nyhed_gruppe,gruppe,nyhed_kategori,kategori WHERE nyhed.nyhedid = nyhed_gruppe.nyhedid AND nyhed_gruppe.gruppeid = gruppe.gruppeid AND nyhed.nyhedid = nyhed_kategori.nyhedid AND nyhed_kategori.katid = kategori.katid AND nyhed.nyhedsynlig=1 AND gruppe.gruppesynlig=1 AND kategori.katsynlig=1 AND gruppe.gruppeid=1 AND kategori.katid<>64 AND kategori.katid<>71 ORDER BY nyheddatotid DESC ;
Ok - fik lige entreprise mangaer til at grouppere for mig :-) - den kom ud med følgende:
SELECT TOP 3 nyhed.nyhedid, nyhed.seasonid, nyhed.nyhedsynlig, nyhed.nyheddatotid, nyhed.nyhedoverskrift, nyhed.nyhedresume FROM nyhed INNER JOIN nyhed_gruppe ON nyhed.nyhedid = nyhed_gruppe.nyhedid INNER JOIN gruppe ON nyhed_gruppe.gruppeid = gruppe.gruppeid INNER JOIN nyhed_kategori ON nyhed.nyhedid = nyhed_kategori.nyhedid INNER JOIN kategori ON nyhed_kategori.katid = kategori.katid WHERE (gruppe.gruppesynlig = 1) AND (kategori.katsynlig = 1) AND (gruppe.gruppeid = 1) AND (kategori.katid <> 64) AND (kategori.katid <> 71) GROUP BY nyhed.nyhedid, nyhed.seasonid, nyhed.nyhedsynlig, nyhed.nyheddatotid, nyhed.nyhedoverskrift, nyhed.nyhedresume HAVING (nyhed.nyhedsynlig = 1) ORDER BY nyhed.nyheddatotid DESC;
Men du får ponitne - du hjalp på vej - smid lige et svar tonnybrandt :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.