Lägg det i databasen.
Måste jag motivera det?
------------------
essentitia preter non sans multiplicandum
27 svar · 417 visningar · startad av Pace
Har tänkt att lägga upp en struktur för en länksamling som är tänkt att expandera kraftigt. Därför har jag beslutat att dela in länkarna i kategorier samt i underkategorier.
Och då till frågan: Ska jag göra själva kategoriseringen i databasen, eller i en fil för sig? För-/nackdelar?
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Lägg det i databasen.
Måste jag motivera det?
------------------
essentitia preter non sans multiplicandum
Nej, det behöver du inte. ;)
Men hur ska jag göra med underkategorier? Det är inga problem i ett steg, exempelvis "Hej > Hopp", men ska man gå ner ytterligare ett steg blir det problem "Hej > Hopp > Hej då". Hur ska man genomföra det?
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Om du sätter ett maxdjup på antal underkategorier så går det att skriva en fråga (utan rekursion) som plockar fram allt i godtycklig (sub)kategori.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 12 dec 2001]
Du menar alltså att man får skapa en tabell per underkategori och sedan göra en sammanslagning av dessa plus sökresultatet när man hämtar datan?
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Nej, det behövs inte
category
--------
id
name
description
subcategory
-----------
subcategoryid
categoryid -- kan vara null
link
----
id
url
description
categoryid
Sen skan man använda unions och lite selfjoin för att få fram det man vill.
Alternativt kan man först traversera kategoriträdet och få fram en lista på möjliga id eller så kan du läsa upp hela den strukturen en gång och lagra i application. Det blir förmodligen inte så mycket data.
------------------
essentitia preter non sans multiplicandum
Okej, men om jag ska lagra en länk i "category" tabellen, vilket ID ska jag då ange i "link" tabellen? För samma ID kan ju både förekomma i "category" och "subcategorys"?!
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Borde väl bli subcategoryid. Jag kom att tänka på en sak....
Du kanske vill ha möjlighet att sätta flera kategorier för dina länkar?
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 13 dec 2001]
Om så vore möjligt, ja!
Man vet ju aldrig hur det kan bli i framtiden. ;)
Borde väl bli subcategoryid.
Om jag vill lägga något i en "rootkategori" då? Exempelvis "Film" istället för "Film > Filmskolor"?
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Det kanske är bättre om du döper kolumnerna så här
subcategory
-----------
categoryid
parentcategoryid
Om något är en rootkategori så har den en parentcategoryid som är null.
Om du vill kunna ha en länk i flera kategorier så får du bryta ut det i en egen tabell
linkcategory
------------
linkid
categoryid
------------------
essentitia preter non sans multiplicandum
subcategory ...
Om något är en rootkategori så har den en parentcategoryid som är null.
Aha, den modellen kör jag på! Tack!
Om du vill kunna ha en länk i flera kategorier så får du bryta ut det i en egen tabell
Oj, då missuppfattade jag din fråga tidigare. Den ska bara finnas i en (1) kategori.
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Hello,
Nu har jag kommit så långt att jag behöver hjälp med SQL satsen. Hur ska jag göra för att läsa ut kategorierna med tillhörande underkategorier?
Exempel:
[b]Category_ID | Cat_Name | ParentCategory_ID[/b]
1 - Uthyrningsföretag - null
2 - LiteGrip - 1
3 - Arri - 1
4 - Aaton - 1
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Vad ska jag använda för funktioner? Någon typ av JOIN?
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Hur skall det fungera?
Tänkte du lägga ut alla kategorier i en dropdown och sedan skicka en lista av valda kategorier(id) till söksidan?
Sen så vill du ha en funktion som givet ett kategoriid returnerar id för alla överliggande kategorier eller?
Vill du kunna hantera ett godtyckligt djup i trädet?
Kommer du att lägga till nya kategorier väldigt ofta?
Det jag funderar på är om det är effektivast att lägga alla kategorier i en array (där index motsvarar id) och som innehåller parentkategori. Då är det lätt att loopa igenom den för varje id tills man kommer till en rootkategori. Den arrayen kan du spara i en application-variabel.
------------------
essentitia preter non sans multiplicandum
Hur skall det fungera?
Bra fråga. ;)
Tänkte du lägga ut alla kategorier i en dropdown och sedan skicka en lista av valda kategorier(id) till söksidan?
Nej.
Sen så vill du ha en funktion som givet ett kategoriid returnerar id för alla överliggande kategorier eller?
Japp.
Vill du kunna hantera ett godtyckligt djup i trädet?
Eventuellt 1-2 underkategorier. Kanske mer.
Kommer du att lägga till nya kategorier väldigt ofta?
Nej.
Det jag funderar på är om det är effektivast att lägga alla kategorier i en array (där index motsvarar id) och som innehåller parentkategori. Då är det lätt att loopa igenom den för varje id tills man kommer till en rootkategori. Den arrayen kan du spara i en application-variabel.
Jag tänkte också på det, men man ska ju även kunna ha länkar i en rootkategori.
Alltså
Film
- Imdb.com
Film > Företag
- Arri.com
Eller jag kanske ska köra på att sköta "sorteringen" med ASP?
r) Och använda sig av rekursion när man visar kategorierna?!
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
[Redigerat av Pace den 14 dec 2001]
Okej, nu har jag bestämt mig för att enbart ha 1 underkategori. Det blir enklast.
Så jag har följande tabeller:
[b]Lankar_Cat[/b]
----------
Cat_ID
Cat_Name
[b]Lankar_Subcat[/b]
-------------
Subcat_ID
Subcat_Name
RootCat_ID
[b]Lankar[/b]
------
ID
Titel
Url
Beskrivning
Kategori
Subkategori
Klick
När jag lägger till en länk så kan den antingen ligga i en rootkategori, eller en underkategori. När den ligger i rooten tänkte jag att exempelvis: Kategori = 3 och Subkategori = null,
och när den ska ligga i en underkategori så blir det
Kategori = null och Subkategori = 3
Men hur ska SQL satsen se ut? Så här långt har jag kommit:
SELECT kategori, id, titel, url, beskrivning, klick
FROM Lankar
LEFT JOIN Lankar_Cat ON Lankar.Kategori = Lankar_Cat.Cat_ID
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
Varför har du med både kategori och subkategori i lankar?
Varför har du med subcat_namn i Lankar_subcat?
Varför blandar du svenska och englska namn?
Lankar_Cat
----------
Cat_ID
Cat_Name
Lankar_Subcat
-------------
Subcat_ID
RootCat_ID
Lankar
------
ID
Titel
Url
Beskrivning
Kategori
Klick
select Cat_Name,id, titel, url, beskrivning, klick
FROM Lankar inner JOIN Lankar_Cat ON Lankar.Kategori = Lankar_Cat.Cat_ID
where Lankar.Kategori = [i]din kategori[/i]
union
select Cat_Name,id, titel, url, beskrivning, klick
FROM (Lankar inner JOIN Lankar_Subcat ON Lankar.Kategori = Lankar_subCat.subCat_ID
inner join Lankar_Cat ON Lankar_subCat.RootCatID = Lankar_Cat.Cat_ID
where Lankar.Kategori = [i]din kategori[/i]
------------------
essentitia preter non sans multiplicandum
Varför har du med både kategori och subkategori i lankar?
För att det var det enda sättet jag fick det att fungera. Men det är bl.a. det jag behöver ha hjälp med!
Varför har du med subcat_namn i Lankar_subcat?
Det är ju underkategoriernas namn. Eller hur menar du?
Varför blandar du svenska och englska namn?
:r Dålig vana. Tabellen "lankar" gjorde jag för några månader sedan, och de andra nyligen.
Jag fick i alla fall detta felet på den SQL du gav mig ovan (MySQL):
You have an error in your SQL syntax near 'INNER JOIN Lankar_Cat ON Lankar.Kategori = Lankar_Cat.Cat_IDWHERE Lankar.Kategor' at line 1
------------------
"Tål det inte att skämtas om, är det inte värt att ta på allvar."
[Redigerat av Pace den 15 dec 2001]
Jag tänkte att du skulle ha med alla kategorier, även subkategorier, i lankar_cat. (Det skulle underlätta om du senare vill lägga till subsubkategorier.)
Av felet att döma så saknar du en blank framför where någonstans i din sql-sats.
Du vet väl att du behöver mysql 4.0 för att union skall fungera.
------------------
essentitia preter non sans multiplicandum