bassebhuMedlem sedan nov. 20016 480 inlägg Hallå!
Detta är en kombinerad PHP/MySQL-fråga. Jag vill att en post ska kunna sparas med 8 checkboxar som kan mixas hur som helst. Jag skulle kunna ha ett fält för varje checkbox, men i stället tänker jag mig att det är smartare att ha ett enda fält och spara värdena där. Checkboxarna ska bara ge 0 eller 1 alt. true/false.
Hur är detta smartast att göra? Spara värdena med semikolon emellan?
Typ: 0;1;1;0;0;1;0;1 eller false;true;true;false;false;true;false;true ?
Därefter vill jag kunna söka i databasen och hitta poster med önskade checkboxkombinationer, men det kanske är en senare sql-fråga och ev. php-fråga för att extrahera värdena.
Ja, koden kan jag förhoppningsvis komma på själv, men hur bör jag tänka?
Tack!
metalboyMedlem sedan jan. 2005953 inlägg Det smarta är att ha ett fält per checkbox. Jag lovar. Du kommer bara ge dig själv en massa huvudbry annars :)
bassebhuMedlem sedan nov. 20016 480 inlägg hehe ok, och det är inte dumt med åtta nya fält för 30 000 poster?
Om det kommer till 20 checkboxar till sen, är det fortfarande bästa lösningen?
Det kommer inte att hända, men det känns ganska odynamiskt med fasta fält för detta.
Jag frågar, för jag vet inte :)
Det smartaste är att spara värdena i en array, och sedan använda sig av serialize och unserialize på datat.
Då blir det enkelt att hantera och expandera, då du kan döpa boxarna till unika idn, ta bort gammal och bibehålla index, osv.
Ska du gära som du säger så kan du lika gärna skita i separator tecken? du vet ju vilket binärt tecken som är vilken box.
svaret är alltså inte
0;1;1;0;0;1;0;1
utan
01100101
Ville du kunna söka på det så skulle jag köra på den sista varianten med. Det har även fördelen att kunna sparas som int, istället för mindre bra varchar eller dylikt i mysql.
:)
cascaMedlem sedan feb. 20005 891 inlägg
walter groupius skrev:
Ville du kunna söka på det så skulle jag köra på den sista varianten med. Det har även fördelen att kunna sparas som int, istället för mindre bra varchar eller dylikt i mysql.
:)
Lite OT, men det här är väl ingen bra idé? INT lagrar heltal, alltså kommer "0101" att sparas som "101".
casca skrev:
Lite OT, men det här är väl ingen bra idé? INT lagrar heltal, alltså kommer "0101" att sparas som "101".
Just fan :birp .. v
Vill man gå över ån efter vatten eller nåt i den stilen så kan man ju alltid se till att börja med en siffra utan att den har något värde.
Hursomhelst så lär det ju bli effektivt nog oavsett typ av tabell nästan :)
Som walter_groupis skrev så är det bästa att använda arrays till detta:
{'cbox1':true,'cbox2':false} osv osv...
bassebhuMedlem sedan nov. 20016 480 inlägg
Forsberg skrev:
Som walter_groupis skrev så är det bästa att använda arrays till detta:
{'cbox1':true,'cbox2':false} osv osv...
Ok, tack! Hur kan en SQL-fråga se ut om jag vill hämta ut alla poster där cbox2 = false då?
cascaMedlem sedan feb. 20005 891 inlägg
bassebhu skrev:
Ok, tack! Hur kan en SQL-fråga se ut om jag vill hämta ut alla poster där cbox2 = false då?
Det finns ju "wildcards" i SQL-syntaxen, som "_". Så om du har åtta värden, t.ex. 00000001 och vill hämta någon med sista värdet satt:
SELECT * FROM usertable WHERE options LIKE '_ _ _ _ _ _ _1'
(Utan mellanrum dock).
aasahMedlem sedan mars 20034 471 inlägg Beroende på vad dina åtta checkboxar har för funktion kan ett bra alternativ vara att lagra resultatet i ett heltal m.h.a. bitprogrammering, så länge du har högst 32 checkboxar. Se ett gammalt inlägg för ett exempel.