Avatar billede stonejunkie Nybegynder
10. juli 2005 - 13:41 Der er 9 kommentarer og
2 løsninger

Nyhedsmodul med flere kategorier.

Jeg har et nyhedsmodul codet i PHP. De nyheder man kan tilføje kan tilhøre en af disse tre kategorier: fritid, arbejde, andet. Disse kategorier har et kategorinummer, altså 1, 2, 3.

Mit spørgsmål er så hvordan laver jeg en sql sætning, som henter den nyeste nyheds overskrift fra hver kategori?

Håber der er nogen der kan hjælpe.
Avatar billede barklund Nybegynder
10. juli 2005 - 13:54 #1
Hm, hvis du ikke har mysql 4.1 (så man kan bruge subselects), så tror jeg du er nødt til at bruge 2 queries - først hente datoerne for de nyeste ud og derefter hente resten af info for de til datoerne hørende nyheder.
Avatar billede thesurfer Nybegynder
10. juli 2005 - 13:57 #2
kan man ikke bare bruge:

select top 1 from TabelNavn where katid in (1,2,3)

hvor "katid" er navnet på kategorinummeret..

eller noget smart :-)

Går ud fra, at alle nyhederne er i 1 tabel..?  Ellers skal man vist bruge noget med JOIN..

/theSurfer
Avatar billede stonejunkie Nybegynder
10. juli 2005 - 14:02 #3
Jeg kører med version 4.1.12. Da jeg ikke er stærk i sql så kan du måske give et eksempel hvordan sql-sætningen som henter de nyeste datoer ud for hver kategori kunne se ud.

takker.
Avatar billede thesurfer Nybegynder
10. juli 2005 - 14:06 #4
Hvis det er mig du skrev til:
Jeg er ikke så god, til det der med JOIN.. men er næsten sikker på, at det er det der skal bruges..

SQL tutorial: http://www.w3schools.com/sql/
-- IN: http://www.w3schools.com/sql/sql_in.asp
-- JOIN: http://www.w3schools.com/sql/sql_join.asp

/theSurfer
Avatar billede barklund Nybegynder
10. juli 2005 - 14:06 #5
Hm, noget med:

SELECT * FROM nyheder WHERE CONCAT(kategori, '-', dato) IN (SELECT CONCAT(kategori, '-', MAX(dato)) GROUP BY kategori ORDER BY dato DESC)

Men det er ikke så kønt :)

--
Morten Barklund
Avatar billede stonejunkie Nybegynder
10. juli 2005 - 18:08 #6
Tak for linksne, thesurfer. Men bruges JOIN ikke kun hvis man har to tabeller?

Barklund, jeg kan desværre ikke få din sætning til at virke. Jeg har ændret den lidt men det virker stadig ikke.

jeg har undladt at sortere efter dato da hver nyhed har et id nummer som automatisk tildeles og som er stigende.
site_id er kategori id'et.

"SELECT * FROM text WHERE site_id IN (SELECT MAX(id) GROUP BY site_id ORDER BY id DESC)";

Er den ovenstående sætning helt forkert eller skal den bare lige rettes til?
Avatar billede barklund Nybegynder
10. juli 2005 - 20:06 #7
Du har jo ændret den? Så virker den ikke længere, nej.

Og prop dog en dato på din tabel - det er da det mest logiske.
Avatar billede stonejunkie Nybegynder
18. august 2005 - 13:50 #8
Jeg er ked af at jeg ikke har fået meldt tilbage, men jeg ændrede opbygningen af siden så mit spørgsmål var ikke længere aktuelt så jeg glemte spørgmålet.

Men barklund og thesurfer hvis i smider et svar så får i lige pointene for jeres råd.

Igen sorry at jeg ikke fik afsluttet spørgsmålet.
Avatar billede barklund Nybegynder
18. august 2005 - 13:53 #9
Helt fint :)
Avatar billede thesurfer Nybegynder
19. august 2005 - 16:19 #10
..og et svar fra mig :-)

/theSurfer
Avatar billede barklund Nybegynder
19. august 2005 - 17:17 #11
Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester