|
| 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
| |
|
|