Kom ihåg mig?

Matcha kommaseparerade nummer

 
Ämnesverktyg Visningsalternativ
Oläst 2005-09-27, 09:57 #1
Lukas Lukas är inte uppkopplad
Medlem
 
Reg.datum: Sep 2004
Inlägg: 100
Lukas Lukas är inte uppkopplad
Medlem
 
Reg.datum: Sep 2004
Inlägg: 100
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
Lukas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-27, 10:16 #2
Martin Martin är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 162
Martin Martin är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 162
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...
Martin är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-27, 10:18 #3
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
kolla efter '%,5%' samt '%5,%' ????
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-27, 11:08 #4
Lukas Lukas är inte uppkopplad
Medlem
 
Reg.datum: Sep 2004
Inlägg: 100
Lukas Lukas är inte uppkopplad
Medlem
 
Reg.datum: Sep 2004
Inlägg: 100
Citat:
Originally posted by Martin@Sep 27 2005, 10:16
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...

Löste det med att kolla efter '5,%' samt '%,5,%' samt '%,5'
Tack för tipset med "-", kommer nog att behöva matcha siffror i andra mysql-grejer.
Lukas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-27, 11:34 #5
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Citat:
Originally posted by Martin@Sep 27 2005, 10:16
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...
LIKE i MySQL har bara två "wildcards":
% 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)
Mikael Simonsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-27, 12:29 #6
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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, ...);
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-28, 07:09 #7
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by grazzy@Sep 27 2005, 12:29
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, ...);
Det var precis vad jag tänkte skriva. Helt galen databasdesign.
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-29, 11:45 #8
Lukas Lukas är inte uppkopplad
Medlem
 
Reg.datum: Sep 2004
Inlägg: 100
Lukas Lukas är inte uppkopplad
Medlem
 
Reg.datum: Sep 2004
Inlägg: 100
Citat:
Originally posted by zoran@Sep 28 2005, 07:09
Det var precis vad jag tänkte skriva. Helt galen databasdesign.
Får väl ta och lära mig använda JOIN då
På vilket sätt är databasdesignen galen, är det pga resurskrävande frågor eller mindre bra utbyggbarhet?
Lukas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-29, 12:08 #9
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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/
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-09-29, 14:18 #10
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Ursprungligen postat av Lukas
Citat:
Ursprungligen postat av zoran
Det var precis vad jag tänkte skriva. Helt galen databasdesign.
Får väl ta och lära mig använda JOIN då
På vilket sätt är databasdesignen galen, är det pga resurskrävande frågor eller mindre bra utbyggbarhet?
Tänk så här, vad händer när du vill dra bort ett kategori och lägga till ett annat för ett visst objekt. Eller om alla objekt som tillhörde kategori 2 ska flyttas till kategori 212?

Det är rena mardrömmen att skapa querys för det.
zoran är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:09.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017