FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Hej!
Jag bygger just nu ett register med poster som ska vara indelade i kategorier. Var post ska vara kunna tillhöra en eller flera kategorier. De olika kategorierna ska kunna ändras, läggas till eller tas bort, och ligga i en egen tabell. Jag funderar därför hur man snyggast gör dessa realationer! Detta är ett sätt, men jag gillar inte det riktigt: Kod:
kategori-tabell: id beskrivning 1 "kat 1" 2 "kat 2" 3 "kat 3" register-tabell: id post kat 1 "reg1" "1,2," 2 "reg2" "2," 3 "reg3" "1,2,3," Kod:
SELECT * FROM register-tabell WHERE kat LIKE '%".$katid.",%' ORDER BY ... Kod:
DELETE FROM kategori-tabell WHERE id=".$katid." LIMIT 1; UPDATE register-tabell SET kat = REPLACE(kat, '".$katid.",', '') WHERE 1 Kod:
UPDATE register-tabell SET kat = CONCAT(kat, '".$katid.",') WHERE id = ... Har någon förslag på ett bättre sätt? / Lasse |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Klarade millennium-buggen
|
Du bör ha en post->kategori-tabell som ser ut nåt i stil med
post_id kategori_id Det gör att du slipper spara relationerna som strängar. |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Mycket flitig postare
|
jag har i helgen satt upp ett system för en webbutik
där har jag - produkter - här lagrar jag alla produkterna - utan någon info [id] [produktnummer] [produktnamn] [kategori] - produktattribut - här lagrar jag en lista på alla olika attribut.. storlek, pris, längd, mängd, vikt, tillverkare - whatever [id] [namn] - attribut - här lagras sen en hel jättelista med produkter (från -produkter-) och attribut (-produktattribut) och sen vilket värde dom har [id] [produktID] [attributID] [värde] nu kan jag alltså väldigt lätt skapa nya attribut för mina produkter utan att designa om databasen |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
Tack för två snabba bra svar!
Citat:
|
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Klarade millennium-buggen
|
Kod:
kategori-tabell: id * * * * * * * * * *beskrivning 1 * * * * * * * * * * *"kat 1" 2 * * * * * * * * * * *"kat 2" 3 * * * * * * * * * * *"kat 3" kategori-koppling-tabell: id * * * * register-id * * * *kategori-id 1 * * * * * 1 * * * * * * * * * * *1 2 * * * * * 1 * * * * * * * * * * *2 3 * * * * * 2 * * * * * * * * * * *2 4 * * * * * 3 * * * * * * * * * * *1 5 * * * * * 3 * * * * * * * * * * *2 6 * * * * * 3 * * * * * * * * * * *3 register-tabell: id * * * * * * * * * *post * * * * * * * * * 1 * * * * * * * * * * *"reg1" 2 * * * * * * * * * * *"reg2" 3 * * * * * * * * * * *"reg3" |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Jag kör på:
Kod:
kategori-koppling-tabell: id * * * * register-id * * * *kategori-id alla registerposter och vilka kategorier de har? Måste man köra en sub-fråga till varje register post? Typ enligt denna principskissen: Kod:
SELECT * FROM register-tabell; Loop (register-tabell) { *SELECT kategori_id FROM kategori-koppling-tabell WHERE register-id = ".[register-tabell.id] *// Output info... } Alltså inte: Kod:
SELECT * FROM register-tabell LEFT JOIN kategori-koppling-tabell ON register-tabell.id = kategori-koppling-tabell.register-id |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Medlem
|
Nej. Du bör nog läsa på lite om SQL, bara ett tips.
![]() Om jag fattat vad du är ute efter rätt bör det bli så här: Kod:
SELECT kategori, register FROM kategori-tabell, register-tabell, kategori-koppling-register-tabell WHERE kategori_id = kategori.id AND register_id = register.id |
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Citat:
![]() (Principskissen var principskiss för skripet jag kör (PHP i mitt fall) med frågor till SQL och inte ren SQL om det misstolkades... :unsure: ) Citat:
(Det är inte heller kategori-namn-hämtning som behövs, utan kategori.id räcker!) Det jag vill göra är att lista alla registerposter, och där även skriva ut vilka kategorier de tillhör. Både min princip-skiss med att köra en extra SQL-fråga för var post och att köra med "LEFT JOIN" funkar! Det blir bara så mycket frågor fram och tillbaks med första lösningen. Andra lösningen skickar var registerpost lika många ggr som antalet kategorier den är med i. (Dock minst en!) Naturligvis onödig data, samt det måste detekteras i skriptet hur många rader som var post har! Det jag vill ha är en JOIN-funktion som bygger på med fler kolumner om det finns flera kategorier, istället för med nya rader! Jag är dock tveksam om det finns en sån funktion! (Jag kör MySQL) |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
om tanken är att varje registerrad ska kunna förekomma en gång i en kategori så är id kolumnen i "kategori-koppling-tabell" överflödig, såvida inte just den relationen ska användas på något annat ställe (vilket inte är troligt i det här fallet). Sätt en unik begränsning på de två kvarvarande istället.
Ett tips. |
||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Klarade millennium-buggen
|
Citat:
|
|||
![]() |
![]() |
Svara |
|
|