/ 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
UPDATE
Fra : Ukendt


Dato : 01-05-08 11:59

Hejsa

Database: MySQL 5
Jeg har et lille problem som består i at en UPDATE ikke vil opdatere felter
som er tomme. Kan det løses på en let måde?

Mvh, Brian



 
 
Gert Krabsen (01-05-2008)
Kommentar
Fra : Gert Krabsen


Dato : 01-05-08 13:30

Brian skrev:
> Hejsa
>
> Database: MySQL 5
> Jeg har et lille problem som består i at en UPDATE ikke vil opdatere felter
> som er tomme. Kan det løses på en let måde?


Du er nødt til at komme med et konkret eksempel.

Hvilke felttyper?
Hvad forstår du ved et tomt felt? Tomt eller indeholdende null?
Hvordan ser din SQL ud?


Ukendt (01-05-2008)
Kommentar
Fra : Ukendt


Dato : 01-05-08 13:40

Hej Gert

>
> Du er nødt til at komme med et konkret eksempel.
>
> Hvilke felttyper?
> Hvad forstår du ved et tomt felt? Tomt eller indeholdende null?
> Hvordan ser din SQL ud?
>
Felttyper: Text
Tomme felter er pt. NULL
SQL: UPDATE content_bu1 SET `Products` = 'beskrivelse' WHERE `id`='1' LIMIT
1;

Første gang UPDATE udføres er felterne jo tomme, og det virker
tilsyneladende ikke. Sætter jeg noget tilfældigt ind virker det.

Mvh, Brian



Leonard (01-05-2008)
Kommentar
Fra : Leonard


Dato : 01-05-08 14:03

On Thu, 1 May 2008 14:40:14 +0200, Brian wrote:

> SQL: UPDATE content_bu1 SET `Products` = 'beskrivelse' WHERE `id`='1' LIMIT
> 1;
>
> Første gang UPDATE udføres er felterne jo tomme, og det virker
> tilsyneladende ikke. Sætter jeg noget tilfældigt ind virker det.

Findes rækken med id=1 inden du bruger UPDATE ?
Altså har du inden da brugt INSERT til at indsætte rækken med id=1
tidligere?

--
Leonard
Hellere komme for sent i dette liv
end for tidligt til det næste ...

Ukendt (01-05-2008)
Kommentar
Fra : Ukendt


Dato : 01-05-08 14:08

> Findes rækken med id=1 inden du bruger UPDATE ?
> Altså har du inden da brugt INSERT til at indsætte rækken med id=1
> tidligere?
>
Jeg har, forsøgsvis først kørt en INSERT for at se om det var manglende
indhold som hindrede en UPDATE. Det viste sig at være korrekt. Problemet med
UPDATE er udelukkende tilstede når feltet er NULL

/Brian



Gert Krabsen (01-05-2008)
Kommentar
Fra : Gert Krabsen


Dato : 01-05-08 14:20

Brian skrev:
>> Findes rækken med id=1 inden du bruger UPDATE ?
>> Altså har du inden da brugt INSERT til at indsætte rækken med id=1
>> tidligere?
>>
> Jeg har, forsøgsvis først kørt en INSERT for at se om det var manglende
> indhold som hindrede en UPDATE. Det viste sig at være korrekt. Problemet med
> UPDATE er udelukkende tilstede når feltet er NULL

At sige, at et felt er NULL giver kun mening i forbindelse med en
eksisterende record.

Du _skal_ køre en INSERT først, ikke kun forsøgsvis - ellers er der jo
ikke noget at opdatere.

UPDATE opdaterer records, der i forvejen findes i tabellen - deraf navnet.


Ukendt (01-05-2008)
Kommentar
Fra : Ukendt


Dato : 01-05-08 14:28

> At sige, at et felt er NULL giver kun mening i forbindelse med en
> eksisterende record.
>
> Du _skal_ køre en INSERT først, ikke kun forsøgsvis - ellers er der jo
> ikke noget at opdatere.
>
> UPDATE opdaterer records, der i forvejen findes i tabellen - deraf navnet.
>
Det virker logisk nok, men jeg havde blot håbet på at der var en smart måde
at udføre en UPDATE såfremt et enkelt felt var tomt ( NULL).

/Brian



Leonard (01-05-2008)
Kommentar
Fra : Leonard


Dato : 01-05-08 14:53

On Thu, 1 May 2008 15:27:47 +0200, Brian wrote:

> Det virker logisk nok, men jeg havde blot håbet på at der var en smart måde
> at udføre en UPDATE såfremt et enkelt felt var tomt ( NULL).

Du snakker forbi os andre når du siger at et enkelt felt er tomt.
En række (record) består af nogle felter fx:

id, navn, adresse
1, Hans, Husvej 12
2, Søren, Byvej 1
3, null, null
5, Gerda, Smutvej 4

Her kan du køre en UPDATE på id=1,2,3 og 5 men ikke på 4, da der ikke
findes en række med id=4. At fleterne i rækken med id=3 er null bør ikke
gøre noget.
Men hvis du vil gøre noget ved id=4, så skal du først bruge INSERT.

--
Leonard
Hellere komme for sent i dette liv
end for tidligt til det næste ...

Ukendt (01-05-2008)
Kommentar
Fra : Ukendt


Dato : 01-05-08 15:38


"Leonard" <piper28a@gmail.invalid> wrote in message
news:1pp1egg0a1lqv$.tj09h6x7wqzq.dlg@40tude.net...
> On Thu, 1 May 2008 15:27:47 +0200, Brian wrote:
>
>> Det virker logisk nok, men jeg havde blot håbet på at der var en smart
>> måde
>> at udføre en UPDATE såfremt et enkelt felt var tomt ( NULL).
>
> Du snakker forbi os andre når du siger at et enkelt felt er tomt.
> En række (record) består af nogle felter fx:
>
> id, navn, adresse
> 1, Hans, Husvej 12
> 2, Søren, Byvej 1
> 3, null, null
> 5, Gerda, Smutvej 4
>
> Her kan du køre en UPDATE på id=1,2,3 og 5 men ikke på 4, da der ikke
> findes en række med id=4. At fleterne i rækken med id=3 er null bør ikke
> gøre noget.
> Men hvis du vil gøre noget ved id=4, så skal du først bruge INSERT.
>
Det er række 3 i dit eksempel jeg ikke kan udføre en UPDATE på.

/Brian



Leonard (01-05-2008)
Kommentar
Fra : Leonard


Dato : 01-05-08 16:02

On Thu, 1 May 2008 16:38:08 +0200, Brian wrote:

> Det er række 3 i dit eksempel jeg ikke kan udføre en UPDATE på.

Underligt, det har jeg ikke været ude for.

--
Leonard
Hellere komme for sent i dette liv
end for tidligt til det næste ...

Gert Krabsen (01-05-2008)
Kommentar
Fra : Gert Krabsen


Dato : 01-05-08 17:23

Brian skrev:
> "Leonard" <piper28a@gmail.invalid> wrote in message
> news:1pp1egg0a1lqv$.tj09h6x7wqzq.dlg@40tude.net...
>> On Thu, 1 May 2008 15:27:47 +0200, Brian wrote:
>>
>>> Det virker logisk nok, men jeg havde blot håbet på at der var en smart
>>> måde
>>> at udføre en UPDATE såfremt et enkelt felt var tomt ( NULL).
>> Du snakker forbi os andre når du siger at et enkelt felt er tomt.
>> En række (record) består af nogle felter fx:
>>
>> id, navn, adresse
>> 1, Hans, Husvej 12
>> 2, Søren, Byvej 1
>> 3, null, null
>> 5, Gerda, Smutvej 4
>>
>> Her kan du køre en UPDATE på id=1,2,3 og 5 men ikke på 4, da der ikke
>> findes en række med id=4. At fleterne i rækken med id=3 er null bør ikke
>> gøre noget.
>> Men hvis du vil gøre noget ved id=4, så skal du først bruge INSERT.
>>
> Det er række 3 i dit eksempel jeg ikke kan udføre en UPDATE på.

Må vi se:

- en dump af tabellen (kan laves via MySqlAdmin). Vi behøver kun to
rækker: en der virker og en der ikke gør.

- den specifikke SQL-sætning der ikke opdaterer

- det svar du får, når du affyrer SQL-kommandoen

alt sammen som cut/paste, så skrivefjel udelukkes, tak

Henrik Davidsen (02-05-2008)
Kommentar
Fra : Henrik Davidsen


Dato : 02-05-08 09:33

> Felttyper: Text
> Tomme felter er pt. NULL
> SQL: UPDATE content_bu1 SET `Products` = 'beskrivelse' WHERE `id`='1'
> LIMIT 1;


Nu er jeg altså ikke lige mysql haj, men skal der virkelig være det der ´
rundt om kolonnenavnet?

Jeg ville umiddelbart tro, at where-klausulen som hedder ´id´ = '1' svarer
til at sammenligne 2 tekststrenge, og de vil jo aldrig være ens - ergo vil
der aldrig ske en opdatering.
Måske er syntaxen rigtig nok i mysql, men det var bare lige et forslag
herfra.

UPDATE content_bu1 SET Products = 'beskrivelse' WHERE id = '1' LIMIT 1
/Sjang




Michael Zedeler (02-05-2008)
Kommentar
Fra : Michael Zedeler


Dato : 02-05-08 13:37

Henrik Davidsen wrote:
>> Felttyper: Text
>> Tomme felter er pt. NULL
>> SQL: UPDATE content_bu1 SET `Products` = 'beskrivelse' WHERE `id`='1'
>> LIMIT 1;
>
> Nu er jeg altså ikke lige mysql haj, men skal der virkelig være det der ´
> rundt om kolonnenavnet?

Det kan man godt. Bemærk at der bliver brugt to forskellige slags
anførselstegn. Jeg synes at det er forvirrende at bruge to slags tegn,
der er så ens, så når man endelig er nødt til at bruge anførselstegn om
identifiers, bør man bruge dobbelt-anførselstegn. Jeg er i tvivl om hvad
der er standard, men mit tip er at de enkelt-anførselstegn der bruges om
identifiers ovenfor _ikke_ er standard.

Mvh. Michael.

Philip Nunnegaard (03-05-2008)
Kommentar
Fra : Philip Nunnegaard


Dato : 03-05-08 10:24

"Henrik Davidsen" <none@none.dk> skrev i meddelelsen
news:ZjASj.17449$xD2.4261@fe60.usenetserver.com...

> Nu er jeg altså ikke lige mysql haj, men skal der virkelig være det der ´
> rundt om kolonnenavnet?

Nej. Det skal der ikke.
Men i phpMyAdmin er det tilsyneladende standard, at den kører med den
syntaks.
Selv gør jeg det ikke.

> Jeg ville umiddelbart tro, at where-klausulen som hedder ´id´ = '1' svarer
> til at sammenligne 2 tekststrenge, og de vil jo aldrig være ens - ergo vil
> der aldrig ske en opdatering.

Sådan er det også i min verden.
Jeg har det så desuden sådan, at det forvirrer mig med anførselstegn eller
aprostroffer omkring variabler eller feltnavne.
Dog undtaget når jeg henter et array ud fra tabellen ved f.eks. $row["id"].
Og her bruger jeg så anførselstegn og ikke aprostrof. (altså dobbelt- og
ikke enkelt.)


Michael Zedeler (03-05-2008)
Kommentar
Fra : Michael Zedeler


Dato : 03-05-08 13:49

Philip Nunnegaard wrote:
> "Henrik Davidsen" <none@none.dk> skrev i meddelelsen
> news:ZjASj.17449$xD2.4261@fe60.usenetserver.com...
>
>> Nu er jeg altså ikke lige mysql haj, men skal der virkelig være det
>> der ´ rundt om kolonnenavnet?
>
> Nej. Det skal der ikke.
> Men i phpMyAdmin er det tilsyneladende standard, at den kører med den
> syntaks.
> Selv gør jeg det ikke.
>
>> Jeg ville umiddelbart tro, at where-klausulen som hedder ´id´ = '1'
>> svarer til at sammenligne 2 tekststrenge, og de vil jo aldrig være ens
>> - ergo vil der aldrig ske en opdatering.
>
> Sådan er det også i min verden.
> Jeg har det så desuden sådan, at det forvirrer mig med anførselstegn
> eller aprostroffer omkring variabler eller feltnavne.
> Dog undtaget når jeg henter et array ud fra tabellen ved f.eks.
> $row["id"]. Og her bruger jeg så anførselstegn og ikke aprostrof. (altså
> dobbelt- og ikke enkelt.)

Syntaksen i PHP er anderledes end i SQL. Som jeg også skrev i min anden
posting, er jeg temmelig sikker på at phpmyadmin laver noget, der ikke
er standard.

Desværre er SQL 99 specifikationen ikke gratis, så jeg kan ikke henvise
til den. Til gengæld overholder postgresql de forskellige sql-standarder
langt bedre end mysql. Efter lidt bladren i dens manual fandt jeg dette her:

http://kortlink.dk/585z

Se afsnittet om quoted identifiers.

Mvh. Michael.


Ukendt (06-05-2008)
Kommentar
Fra : Ukendt


Dato : 06-05-08 12:15

Hej alle

Tak for de mange input/svar.
Mit problem er løst såldes at jeg i tilfælde af at en UPTATE ikke kan
udføres, blot udfører en INSERT i stedet.

Mvh, Brian



Søg
Reklame
Statistik
Spørgsmål : 177578
Tips : 31968
Nyheder : 719565
Indlæg : 6409072
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste