/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Mysql: in argument i where
Fra : Sonni Skammelsen


Dato : 28-07-04 12:08

Hej

Jeg sidder og roder lidt med noget mysql database og laver tit denne her
forespøgsel:
SELECT * FROM table WHERE table.id IN ('1,2,3,4,5,6,7')
men nu kunne jeg tænke mig at vende den lidt om så det bliver
SELECT * FROM table WHERE '2' IN (felt)
hvor felt indeholder 1,2,3,4,5,6,7
dette ser dog ikke ud til at virke.
Hvordan får jeg nemmest dette til at virke på en mysql 3.xx

/Sonni

 
 
Jens Gyldenkærne Cla~ (28-07-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 28-07-04 12:31

Sonni Skammelsen skrev:

> SELECT * FROM table WHERE table.id IN ('1,2,3,4,5,6,7')

Den betyder ID = 1 OR ID = 2 OR ID = 3 ....

> SELECT * FROM table WHERE '2' IN (felt)
> hvor felt indeholder 1,2,3,4,5,6,7

Det giver ikke mening. Det svarer til '2' = felt, hvor det du
efterlyser er om '2' indgår som en del af feltet.

Hvis man skal lave wildcardsøgninger i sql, skal man bruge LIKE-
operatoren. Prøv med:

   SELECT * FROM table WHERE felt LIKE '%2%'

Ovenstående vil fange ethvert 2-tal i feltet - altså også følgende
eksempel "1,3,24,30". Hvis det er et problem, må du hive kommaet
med i forespørgslen:

   SELECT * FROM table WHERE ',' + felt + ',' LIKE '%,2,%'

Men spørgsmålet er måske også om din datastruktur er i orden. Hvis
tallene i feltet har betydning hver for sig, bør de ikke gemmes i
ét felt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Sonni Skammelsen (28-07-2004)
Kommentar
Fra : Sonni Skammelsen


Dato : 28-07-04 12:47

On Wed, 28 Jul 2004 13:31:07 +0200, Jens Gyldenkærne Clausen wrote:

> Sonni Skammelsen skrev:
>
>> SELECT * FROM table WHERE table.id IN ('1,2,3,4,5,6,7')
>
> Den betyder ID = 1 OR ID = 2 OR ID = 3 ....
>
>> SELECT * FROM table WHERE '2' IN (felt)
>> hvor felt indeholder 1,2,3,4,5,6,7
>
> Det giver ikke mening. Det svarer til '2' = felt, hvor det du
> efterlyser er om '2' indgår som en del af feltet.
>
> Hvis man skal lave wildcardsøgninger i sql, skal man bruge LIKE-
> operatoren. Prøv med:
>
>    SELECT * FROM table WHERE felt LIKE '%2%'
>

Den er fin, da jeg er sikker på at den streng jeg matcher på er unique i
forhold til de værdier der kan stå i feltet.

Men jeg skrev dog lidt noget sludder alligevel, jeg vil kun have rækken
ud hvis min streng ikke indgår i det felt.

Det skulle man så tro man fiksede ved at sætte et 'NOT' in foran like,
men den gik ikke, hvad gør man så ?

> Ovenstående vil fange ethvert 2-tal i feltet - altså også følgende
> eksempel "1,3,24,30". Hvis det er et problem, må du hive kommaet med i
> forespørgslen:
>
>    SELECT * FROM table WHERE ',' + felt + ',' LIKE '%,2,%'
>
> Men spørgsmålet er måske også om din datastruktur er i orden. Hvis
> tallene i feltet har betydning hver for sig, bør de ikke gemmes i ét
> felt.

Det er så et spørgsmål der må svæve i det uvisse, da den verden jeg
operer i er bygget op således at dette er måden det skal gøres på.
Og jeg foretrækker databasen foretager denne sammenligning og ikke min
applikation.

/Sonni

Jens Gyldenkærne Cla~ (28-07-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 28-07-04 13:18

Sonni Skammelsen skrev:

>> SELECT * FROM table WHERE felt LIKE '%2%'

> Men jeg skrev dog lidt noget sludder alligevel, jeg vil kun
> have rækken ud hvis min streng ikke indgår i det felt.

Prøv med:

SELECT * FROM table
       WHERE NOT (felt LIKE '%2%')
       OR felt IS NULL


> Det er så et spørgsmål der må svæve i det uvisse, da den
> verden jeg operer i er bygget op således at dette er måden det
> skal gøres på. Og jeg foretrækker databasen foretager denne
> sammenligning og ikke min applikation.

Databasen er sandsynligvis også hurtigere til det end din
applikation. Men hvis du bryder 1. normalform (som det ser ud til
at du gør), vil du alligevel kunne få en stor gevinst ved at
opbygge databasen anderledes.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Sonni Skammelsen (28-07-2004)
Kommentar
Fra : Sonni Skammelsen


Dato : 28-07-04 13:25

On Wed, 28 Jul 2004 14:17:58 +0200, Jens Gyldenkærne Clausen wrote:

> Sonni Skammelsen skrev:
>
>>> SELECT * FROM table WHERE felt LIKE '%2%'
>
>> Men jeg skrev dog lidt noget sludder alligevel, jeg vil kun
>> have rækken ud hvis min streng ikke indgår i det felt.
>
> Prøv med:
>
> SELECT * FROM table
>        WHERE NOT (felt LIKE '%2%')
>        OR felt IS NULL
>
>

Takker, fandt den dog selv ca. samme tid som du postede, men det var lige
den med is null der skulle til :)

>> Det er så et spørgsmål der må svæve i det uvisse, da den
>> verden jeg operer i er bygget op således at dette er måden det
>> skal gøres på. Og jeg foretrækker databasen foretager denne
>> sammenligning og ikke min applikation.
>
> Databasen er sandsynligvis også hurtigere til det end din
> applikation. Men hvis du bryder 1. normalform (som det ser ud til
> at du gør), vil du alligevel kunne få en stor gevinst ved at
> opbygge databasen anderledes.

Det ville jeg også gerne, men det kan jeg ikke, basen ser ud som den gør
og det må jeg leve med om jeg vil eller ej.

/Sonni

Søg
Reklame
Statistik
Spørgsmål : 177516
Tips : 31968
Nyheder : 719565
Indlæg : 6408626
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste