Avatar billede Slettet bruger
22. juni 2002 - 14:14 Der er 19 kommentarer og
1 løsning

Links med kategorier

Hey

Jeg har to tabeller: links_kategorier og links. Tabellen "links" indeholder alle links'ene og den anden indeholde de kategori navne som links'ene er placeret i. Eksempel:

links_kategorier:
--------------------
ID: 1
NAVN: Blandet links
--------------------
ID: 2
NAVN: Portaler
--------------------
ID: 3
NAVN: Private sider
--------------------

links:
--------------------
ID: 1
NAVN: Jubii.dk
URL: www.jubii.dk
KATEGORI: 2
--------------------
ID: 2
NAVN: fbold.dk
URL: www.fbold.dk
KATEGORI: 2
--------------------
ID: 3
NAVN: lycos
URL: www.lycos.co.uk
KATEGORI: 1
--------------------

Så vil jeg gerne have sådan at når jeg går ind på links siden så skal den vise de 5 nyeste i hver kategori. Og hvis der ikke er nogen skal den slet ikke skrive kategorien eller bare skrive "Ingen"! Jeg bruger allerede SELECT koden:

SELECT links.id,links.navn,links_kategorier.navn AS kategori_navn,links_kategorier.id AS kategori_id,links.url FROM links_kategorier LEFT JOIN links ON links.kategori=links_kategorier.id;

Hvis det er til nogen hjælp. Men jeg vil gerne have det til at se sådan her ud når jeg går ind på links siden:

Portaler:

-Jubii.dk
-fbold.dk

Blandet links:

-lycos

Og eventuelt også:

Private sider:

Ingen!


Jeg kan ASP og CGI så hvis der er brug for nogen kode så vil jeg gerne have det i ASP eller CFI/PERL. Men det skulle der da ikke være bruge for.
Avatar billede a1a1 Novice
22. juni 2002 - 14:23 #1
hvis du nu laver din sql om til
SELECT TOP 5 links.id,links.navn,links_kategorier.navn AS kategori_navn,links_kategorier.id AS kategori_id,links.url FROM links_kategorier LEFT JOIN links ON links.kategori=links_kategorier.id ORDER BY links_kategorier.id, links.id DESC

så får du kun de 5 nyeste
Avatar billede Slettet bruger
22. juni 2002 - 14:26 #2
Ja, men de bliver ikke gruperet under kategoriens navn...
Avatar billede tipsen Nybegynder
22. juni 2002 - 14:26 #3
Det var ellers et sjovt indslag :-)
Avatar billede a1a1 Novice
22. juni 2002 - 14:28 #4
nårrr nej du vil have 5 fra hver kategori....

så må du gøre såånnn

strSQL1 = "select links_kategorier.navn AS kategori_navn,links_kategorier.id FROM links_kategorier"

open datbase osv.
while not oRs.eof
response.write oRs("kategori_navn") & "<br />"
strSQL2 = "select id, navn FROM links WHERE kategori = " & oRs("id") & ""
set oRs2 = conn.execute(strSQL2)
while not oRs2.eof
response.write oRs2("links") & "<br />"
oRs2.MoveNext
Wend
oRs.MoveNext
wend

:)
Avatar billede a1a1 Novice
22. juni 2002 - 14:29 #5
ups så skal du jo huske top 5 i links sqlen......:o)


while not oRs.eof
response.write oRs("kategori_navn") & "<br />"
strSQL2 = "select TOP 5 id, navn FROM links WHERE kategori = " & oRs("id") & " ORDER BY ID DESC"
set oRs2 = conn.execute(strSQL2)
while not oRs2.eof
response.write oRs2("links") & "<br />"
oRs2.MoveNext
Wend
oRs.MoveNext
Avatar billede Slettet bruger
22. juni 2002 - 14:30 #6
Ja det kan man godt lave sådan, men kan det ikke laves i en SELECT???
Avatar billede tmceu Praktikant
22. juni 2002 - 14:36 #7
Vi kan hurtigt blive enige om, at ovenstående ikke er særlig elegant eller effektiv. Jeg vil påstå at man kunne lave et, måske ikke elegant, men brugbart, SELECT statement på eks. SQL Server el. Oracle, men jeg vil mene er der ikke er nogen bedre måde at lave det på med MySQL.
Avatar billede a1a1 Novice
22. juni 2002 - 14:36 #8
tjoo, det kunne muligvis laves med en subselect eller noget men det er jo til mySQL og det kan den jo ikke...
Avatar billede tmceu Praktikant
22. juni 2002 - 14:38 #9
a1 >> præcist :)
Avatar billede a1a1 Novice
22. juni 2002 - 14:58 #10
ja det kan man...(sql server, min db)

SELECT c.sCatname, t.ID, t.sTextHeading FROM tbl_text t
LEFT JOIN tbl_cat c ON t.fk_catID=c.ID
WHERE t.ID IN (SELECT TOP 5 ID FROM tbl_text WHERE fk_catID=c.ID ORDER BY ID DESC)
ORDER BY c.sCatname
Avatar billede a1a1 Novice
22. juni 2002 - 15:00 #11
... , t.ID DESC
Avatar billede Slettet bruger
22. juni 2002 - 15:20 #12
Mhhh... Det ser rigtigt nok ud, men jeg kan ikke få det til at virke... Her er min SELECT:

SELECT links.id,links.navn,links.beskrivelse,links_kategorier.navn AS kategori_navn,links_kategorier.id AS kategori_id,links.adresse,links.sprog FROM links_kategorier LEFT JOIN links ON links.kategori=links_kategorier.id WHERE links.id IN (SELECT TOP 5 links.id FROM links WHERE links.kategori=links_kategorier.id ORDER BY links_kategorier.id DESC) ORDER BY links_kategorier.navn;
Avatar billede Slettet bruger
22. juni 2002 - 15:26 #13
Når jeg kører den i phpmyadmin får jeg denne fejl:

Fejl

SQL-forespørgsel : 

SELECT links.id,links.navn,links.beskrivelse,links_kategorier.navn AS kategori_navn,links_kategorier.id AS kategori_id,links.adresse,links.sprog FROM links_kategorier LEFT JOIN links ON links.kategori=links_kategorier.id WHERE links.id IN (SELECT TOP 5 links.id FROM links WHERE links.kategori=links_kategorier.id ORDER BY links_kategorier.id DESC) ORDER BY links_kategorier.navn LIMIT 0, 30

MySQL returnerede:


You have an error in your SQL syntax near 'SELECT TOP 5 links.id FROM links WHERE links.kategori=links_kategorier.id ORDER ' at line 1

Tilbage
Avatar billede tmceu Praktikant
22. juni 2002 - 15:29 #14
vedkommende skriver jo også at MySQL ikke understøtter sub-selects og at det var sådan det kunne laves på SQL Server :-)
Avatar billede a1a1 Novice
22. juni 2002 - 15:34 #15
desværre...:(

men mySQL kommer på et tidspunkt til at understøtte subselects....
(men hvad hjælper det dig nu...:o))
Avatar billede Slettet bruger
22. juni 2002 - 15:38 #16
Okay... Takker for hjælpen...
Avatar billede Slettet bruger
22. juni 2002 - 15:40 #17
Avatar billede Slettet bruger
22. juni 2002 - 15:41 #18
Det kommer i version 4.1..........................................................................................
Avatar billede a1a1 Novice
22. juni 2002 - 15:45 #19
tak for points...:)

jeg tror ikke at du kan benytte deres "forslag" til at gøre det anderledes da det du har brug for er en "ægte" subselect ikke bare en simpel reference til en anden tabel
Avatar billede Slettet bruger
22. juni 2002 - 15:47 #20
Yip...
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