Just nu i M3-nätverket
Gå till innehåll

Komplicerat?


jess

Rekommendera Poster

Jag har en databas som jag använder på min hemsida:

http://www.vegomums.com

Det är en receptsida. Nu till problemet:

 

I dagsläget har varje recept en kategori kopplat till sig; tex sallad eller förrätt.

Nu har jag kommit på två saker i efterhand som skulle vara önskvärt. Det första är att varje recept ska kunna kopplas till mer än 1 kategori. Ett recept på en tårta ska tex kunna ligga både i kategorien "Efterrätter" och i kategorin "bakat" (den sistnämnda kategorin finns inte idag.

Problem nr 2 är att en del kategorier kommer "följas av" underkategorier, så att man tex klickar på kategorin Drycker och då får upp en sida där man väljer Kalla eller Varma. När man sedan valt tex Kalla får man upp en ny sida där man väljer Alkoholfria eller Med alkohol. Hänger ni med?

Jag hämtar informationen från databasen med hjälp av PHP.

Förstasidan där alla kategorier visas är uppbyggd med hjälp av PHP och visar alla förekommande kategorier (men bara en gång förstårs). Den sida man kommer till om man klickar på en kategori är också en PHP-sida där jag listar alla recept som finns i denna kategori. Denna sida ska alltså alltid vara densamma (samma fil) oavsett om det finns eller inte finns någon underkategori till den huvudkategori jag klickat på.

Hmmm... det är inte så lätt att förklara det här känns det som...

Problemet alltså:

hur bygger jag om min databas så att varje recept kan ha flera kategorier med en underkategori (underkategorierna är inte desamma för varje huvudkategori) och hur ska jag tänka när jag sedan listar detta på sidan?

Någon som har en idé?

 

Länk till kommentar
Dela på andra webbplatser

Alltså... jag tror jag måste skriva lite till så ni förstår ;-)

 

Först tyckte jag det lät så enkelt. Jag bara lägger ju i recepttabellen in Kategori1, Kategori2, Kategori3. Men underkategorierna då? Det är där problemet uppstår... Det hade ju iofs inte heller varit något problem om alla huvudkategorier innehållit samma underkategorier men det gör de alltså inte. Så när jag kommer till problemet att jag ska lista vilka underkategorier som finns till denna huvudkategori - vad göra? Jag tror inte riktigt jag har det här med kopplingstabell klart för mig och jag tror det är där någonstans lösningen på problemet ligger?

 

Jag tänker så här:

Förstasidan: här listar jag helt enkelt alla huvudkategoierna med bara en förekomst av varje - inga problem.

Sida 2: Nu har man klickat på en huvudkategori och jag skickar med värdet på denna till sida 2. Nu ska jag lista alla underkategorier som hör till denna huvudkategori, men var borde dom finnas? I en kopplingstabell? Hur knyter man liksom samman dessa? Och vad händer om det finns en "underunderkategori" bara på vissa av underkategorierna? Hur talar jag då om att "om det finns en underkategori till denna underkategori så ska man skickas vidare till en sida som visar dessa men om det inte finns någon underkategori till denna underkategori så ska man skickas vidare till sidan som listar recepten?

Sida 3: Nu har man valt en underkategori och värdet från denna skickas med till sida 3. Men på något sätt måste jag fortfarande veta vilken huvudkategori denna hör till eftersom vissa huvudkategorier kan ha underkategorier med samma namn. Hur löser jag detta?

Sen listar jag alla recept med denna huvudkategori+underkategori.

Sida 4: Nu har man valt ett recept och det visas. Inga problem.

 

Så, problemen ligger väl egentligen på sida 2 och 3 men framför allt i strukturen av databasen.

 

Please help!

Antar att allt låter helt snurrigt... men men jag gjorde mitt bästa :-)

 

[inlägget ändrat 2003-05-07 22:08:21 av jess]

Länk till kommentar
Dela på andra webbplatser

Hej Jess!

 

Det låter inte alls så förvirrat som du tror *ler*. Lösningen på ditt problem är hyfstat enkelt igentligen. Du skriver inte vad du använder för typ av databashanterare, så förklaringen jag ger förutsätter MS SQL, men oavsett vad du använder är det ju oftast bara syntaxskillander som är lätta att lista ut vad det skall vara.

 

Vad jag ser är att du behöver tre stycken tabeller:

1. Kategorier

id,

parentid,

kategori

2. Recept

(dina kolumner)

3. KategoriRecept

ReceptID

KategoriID

 

I tabell 1 lägger du in alla kategorier du har, parentid anger du som NULL eller 0 om det är en huvudkateori, om det är en underkategori anger du idt för förälderkategorin.

 

I tabell 2 lägger du in dina recept.

 

I tabell 3 lägger du in vilka olika kategorier ett recept kan tillhöra.

 

Sen för att kunna lista ut vilka underkategorier som finns till en kategori (ovasett om det är en huvud- eller underkategori) använder du något som kallas för en Self Join, som skrivs så här:

 

SELECT k1.id AS ParentID,

k1.kategori AS ParentKategori,

k2.id AS ChildID,

k2.kategori AS ChildKategori

FROM Kategori k1

LEFT JOIN Kategori k2 ON k1.id = k2.parentid

-- om du vill ha för en viss kategori

WHERE k1.id = <den huvudkategori du söker på>

 

Anledningen till att jag använder "LEFT JOIN" är för att lista alla kategorier, oavsett om det finns en underkategori eller inte. I de fallen en kategori inte har en underkategori får du NULL i k2.id och k2.kategori.

 

Om du behöver, vilket jag inte tror, förklaring för hur du listar alla recept till en viss kategori skriver du som följer:

SELECT k1.id AS KategoriID,

k1.kategori,

r1.id AS ReceptID,

FROM Kategori k1,

KategoriRecept kr,

Recept r1

WHERE k1.id = kr.kategoriid AND

kr.receptid = r1.id AND

k1.id = <den kategori du vill lista>

 

Jag hoppas det här hjälper dig en bit på väg i din lösning.

 

Tjipp,

____Robbac_____________________________________

The Truth Is Out there

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...