Avatar billede jensgram Nybegynder
18. september 2003 - 09:46 Der er 11 kommentarer og
1 løsning

NOT IN() opfører sig underligt! Fatter bjælde!

Hej Eksperter

Hvorfor vil følgende ikke virke:

UPDATE tabel SET wievedby = CONCAT(wievedby, '," . foo() . "') WHERE id = " . $bar . " AND " . foo() . " NOT IN(wievedby)"

Det er den sidste del (NOT IN()), der ikke virker! Har jeg eks:

wievedby = 10,6

Indsætter den stadig ',6', hvilket NOT IN() skulle sørge for! Hvad er der galt?
Avatar billede jensgram Nybegynder
18. september 2003 - 09:51 #1
der skal altså KUN opdateres, hvis foo() ikke er repræsenteret i listen "wievedby"...
Avatar billede arne_v Ekspert
18. september 2003 - 09:56 #2
NOT IN (10,6) bør ekskludere integers 10 og 6.

NOT IN ('10','6') bør ekskludere strings '10' og '6'

NOT IN (',10',',6') bør ekskludere strings ',10' og ',6'
Avatar billede jensgram Nybegynder
18. september 2003 - 10:08 #3
Ja! Derfor forstår jeg det heller ikke. Når query'en bliver parset bliver det:

UPDATE tabel SET wievedby = CONCAT(wievedby, ',6') WHERE id = 15 AND 6 NOT IN(wievedby)

Men alligevel indsættes ,6 efter wievedby, selvom wievedby indeholder 10,5,6,3,4 for feltet med id = 15...

Det forstår jeg ikke. Kan man virkelig ikke bruge et felt fra query'en i IN()???
Avatar billede jensgram Nybegynder
18. september 2003 - 10:50 #4
Kigger ind når jeg kommer fra arbejde (ca. midnat)
Avatar billede arne_v Ekspert
18. september 2003 - 10:53 #5
Jeg forstår ikke helt.

CONCAT(wievedby, ',6')  antyder at viewedby er string

6 NOT IN(wievedby) antyder at viewedby er integer

Der er noget galt !
Avatar billede jensgram Nybegynder
18. september 2003 - 11:19 #6
Nej, jeg bliver jo nødt til at indsætte:

eks, før: wievedby: 10,5
eks, eft: wievedby: 10,5,6 (indsat som ',6')

wievedby er således en liste (10,5,6). Vel en slags streng?!?
Avatar billede arne_v Ekspert
18. september 2003 - 11:22 #7
Hvad datatype har viewedby ?
Avatar billede arne_v Ekspert
18. september 2003 - 11:24 #8
I parentes bemærket er hel konstruktionen meget "ikke-relationel".

Et felt i en relationel database bør kun indeholde atomiske værdier.

Normalt ville man løse dit problem med en seperat tabel:

viewedby
id    viewer
7    10
7    5
7    6

og så indsætte en ny record i den tabel.
Avatar billede jensgram Nybegynder
19. september 2003 - 00:54 #9
arne_v > wievedby er varchar(255). Du har fuldstændig ret med konstruktionen, men jeg synes bare det burde være så simpelt, at jeg lige måtte prøve det - og så virker det ikke...
Avatar billede jensgram Nybegynder
19. september 2003 - 09:32 #10
arne_v > Jeg tror jeg bruger din løsning med en seperat tabel. Gider du smide et svar?
Avatar billede arne_v Ekspert
19. september 2003 - 09:34 #11
ok
Avatar billede jensgram Nybegynder
19. september 2003 - 11:03 #12
Så kommer der bare lige 30 styks til dig ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester