FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Jag behöver hämta alla poster från en tabell där fältet "category" t ex har värdet "5", antingen som ett enskilt nummer ("5") eller som en del i en kommaseparerad lista, t ex "1,5" eller "1,4,5,13" eller "5,8,12"
Att skriva category = 5 leder som bekant till att bara "singlar" visas, och om jag skriver category LIKE '%5%' så får jag ju med allt som har kategori 15 (t ex "7,9,15") då fältet category kan ha högre värden än 9. Hur löser man det på ett smidigt sätt? Mvh Lukas |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Testa detta:
category LIKE '%5%' AND catergory NOT LIKE '-5' där '-' kan vara ett nummer 0-9. Då försvinner 15, 25, 55 osv... Har inte testat om det fungerar men kör du mysql så ska det nog fungera... |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Klarade millennium-buggen
|
kolla efter '%,5%' samt '%5,%' ????
![]() |
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
Citat:
Tack för tipset med "-", kommer nog att behöva matcha siffror i andra mysql-grejer. |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Nykomling
|
Citat:
% Matches any number of characters, even zero characters _ Matches exactly one character Med REGEXP kan man använda reguljära uttryck, t.ex.: ... WHERE catergory REGEXP 'uttryck'; (För mer info: http://dev.mysql.com/doc/mysql/en/regexp.html) |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
Inte för att vara en tråkmåns, men har du ett fält som ser ut sådär har du till 99%s sannolikhet designat din databas fel.
Använd istället en extern tabell kallad item2cat som innehåller {item_id, kat_id}. Då kan du istället skriva dina sökningar i stil med: SELECT ... FROM item LEFT JOIN item2cat ON (item.id = item2kat.item_id) WHERE item2kat.kat_id IN(5,10,15, ...); |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Mycket flitig postare
|
Citat:
|
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Citat:
![]() På vilket sätt är databasdesignen galen, är det pga resurskrävande frågor eller mindre bra utbyggbarhet? |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Klarade millennium-buggen
|
Både och i detta fallet. Att göra en LIKE-sträng-matchning mot jämfört mot att matcha ett indexerat heltal är inte särskilt skalbart. Utbyggbart är det väl såvida du inte har artiklar som finns i tusentals kategorier.
Det du eftersträvar kallas för normalisering, det innebär i princip att man aldrig sparar mer än ett värd i ett fält. Det är rätt enkelt att visualisera, du sparar inte "adress" som ett fält med "namn, address, postnummer, stad" utan du separerar det i 4 olika fält. Om du skulle göra detta med ditt ovanstående fält så får du problem eftersom du vill ha ett obestämt antal kategorier till varje produkt. Då måste man ha en extra tabell. En utmärkt referens för att lära sig grunderna finns på http://www.databasteknik.se/webbkursen/ |
||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
Citat:
Det är rena mardrömmen att skapa querys för det. |
|||
![]() |
![]() |
Svara |
Ämnesverktyg | |
Visningsalternativ | |
|
|