Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL-forespørgsel virker ikke

1 view
Skip to first unread message

Kurt Hansen

unread,
Jul 23, 2017, 10:33:18 AM7/23/17
to
Jeg har en tabel der hedder "products" og i den er der et felt der
hedder "products_price_per".

Jeg ved at der er knapt 700 forekomster af ordet "MVD" og det vil jeg
gerne rette til "DVD".

UPDATE products
SET products_price_per = REPLACE(products_price_per, 'MVD', 'DVD')

- siger imidlertid at der er 0 rækker der matcher.
--
Venlig hilsen
Kurt Hansen

Dennis Munding

unread,
Jul 23, 2017, 12:43:07 PM7/23/17
to
Jeg er langt fra den skarpeste i MySQL statements, så jeg fandt en
mulig løsning på dit problem:

UPDATE products SET products_price_per = REPLACE(products_price_per,
'MVD', 'DVD') WHERE INSTR(products_price_per, 'MVD') > 0;

Kilde:
https://stackoverflow.com/questions/125230/mysql-search-and-replace-some-text-in-a-field



--
Med venlig hilsen

Dennis Munding

---
Denne mail er kontrolleret for vira af AVG.
http://www.avg.com

Kurt Hansen

unread,
Jul 23, 2017, 2:18:08 PM7/23/17
to
Den 23/07/2017 kl. 18.43 skrev Dennis Munding:
> Kurt Hansen wrote:
>
>> Jeg har en tabel der hedder "products" og i den er der et felt der
>> hedder "products_price_per".
>>
>> Jeg ved at der er knapt 700 forekomster af ordet "MVD" og det vil jeg
>> gerne rette til "DVD".
>>
>> UPDATE products
>> SET products_price_per = REPLACE(products_price_per, 'MVD', 'DVD')
>>
>> - siger imidlertid at der er 0 rækker der matcher.
>
>
> Jeg er langt fra den skarpeste i MySQL statements, så jeg fandt en
> mulig løsning på dit problem:
>
> UPDATE products SET products_price_per = REPLACE(products_price_per,
> 'MVD', 'DVD') WHERE INSTR(products_price_per, 'MVD') > 0;
>
> Kilde:
> https://stackoverflow.com/questions/125230/mysql-search-and-replace-some-text-in-a-field

Tusind tak, Dennis. Du er en knop i bearnaisesovs. Jeg havde aldrig selv
kunnet google mig frem til den side, da jeg ikke har fantasi til at
finde på de rette nøgleord.

Det virker, skal jeg hilse at sige :-)

Dennis Munding

unread,
Jul 23, 2017, 2:32:06 PM7/23/17
to
Det var så lidt - jeg har selv fundet mange svar på stackoverflow
gennem tiden. :-)

Arne Vajhøj

unread,
Jul 24, 2017, 11:54:07 PM7/24/17
to
On 7/23/2017 2:18 PM, Kurt Hansen wrote:
> Den 23/07/2017 kl. 18.43 skrev Dennis Munding:
>> Kurt Hansen wrote:
>>> Jeg har en tabel der hedder "products" og i den er der et felt der
>>> hedder "products_price_per".
>>>
>>> Jeg ved at der er knapt 700 forekomster af ordet "MVD" og det vil jeg
>>> gerne rette til "DVD".
>>>
>>> UPDATE products
>>> SET products_price_per = REPLACE(products_price_per, 'MVD', 'DVD')
>>>
>>> - siger imidlertid at der er 0 rækker der matcher.

>> UPDATE products SET products_price_per = REPLACE(products_price_per,
>> 'MVD', 'DVD') WHERE INSTR(products_price_per, 'MVD') > 0;
>>
>> Kilde:
>> https://stackoverflow.com/questions/125230/mysql-search-and-replace-some-text-in-a-field

> Det virker, skal jeg hilse at sige :-)

Der er noget som ikke rigtigt passer sammen her.

Uden WHERE skal den opdatere alle raekker.

Med WHERE skal den opdatere kun de rækker som matcher.

Men med WHERE kan aldrig opdatere flere rækker end
uden WHERE.

Arne

Kurt Hansen

unread,
Jul 25, 2017, 12:33:47 AM7/25/17
to
>
>>> Kurt Hansen wrote:
>>>> Jeg har en tabel der hedder "products" og i den er der et felt der
>>>> hedder "products_price_per".
>>>>
>>>> Jeg ved at der er knapt 700 forekomster af ordet "MVD" og det vil jeg
>>>> gerne rette til "DVD".

>> Den 23/07/2017 kl. 18.43 skrev Dennis Munding:
>
>>>> UPDATE products
>>>> SET products_price_per = REPLACE(products_price_per, 'MVD', 'DVD')
>>>>
>>>> - siger imidlertid at der er 0 rækker der matcher.
>
>>> UPDATE products SET products_price_per = REPLACE(products_price_per,
>>> 'MVD', 'DVD') WHERE INSTR(products_price_per, 'MVD') > 0;
>>>
>>> Kilde:
>>> https://stackoverflow.com/questions/125230/mysql-search-and-replace-some-text-in-a-field
>
>>> Kurt Hansen wrote:
>
>> Det virker, skal jeg hilse at sige :-)

Den 25/07/2017 kl. 05.54 skrev Arne Vajhøj:
> Der er noget som ikke rigtigt passer sammen her.
>
> Uden WHERE skal den opdatere alle raekker.
>
> Med WHERE skal den opdatere kun de rækker som matcher.
>
> Men med WHERE kan aldrig opdatere flere rækker end
> uden WHERE.

Det var netop kun eet felt jeg ville opdatere, så det var vist lige
præcist det der skulle til. Det virker i hvert fald for mig.

Dennis Munding

unread,
Jul 25, 2017, 4:50:17 AM7/25/17
to
Jeg tror, I taler forbi hinanden, Kurt...

Hvis jeg forstår det ret, så vil du opdatere ét felt
(products_price_per) i hver række...?
Og eftersom du iflg. dig selv har mere end 700 forekomster, som skal
rettes, så skal du køre forespørgslen lige så mange gange (med mit
kendskab til MySQL)...

Altså er den model jeg fandt ikke den ideelle til at løse dit problem,
hvilket er det, Arne påpeger - hvis jeg vel at mærke har forstået jer
begge korrekt. :-)

Men har i skrivende stund ikke sat mig ind i, hvad INSTR() gør i
forespørgslen...

Dennis Munding

unread,
Jul 25, 2017, 5:05:31 AM7/25/17
to
Efter at have kigget lidt på INSTR() er jeg ikke sikker på, at du har
ret i den påstand - men hører gerne fra MySQL-nørder...

Som jeg forstår denne forespørgsel:
UPDATE products SET products_price_per = REPLACE(products_price_per,
'MVD', 'DVD');

...så gennemløber den db og erstatter alle forekomster af 'MVD' i
'products_price_per' med 'DVD'.

Så kort sagt fungerer INSTR() som en for-løkke, set med mine øjne.

Arne Vajhøj

unread,
Jul 25, 2017, 9:26:06 AM7/25/17
to
SET products_price_per = REPLACE(products_price_per,'MVD', 'DVD');

virker som:

for each row in products table {
rows products_price_per field = REPLACE(...)
}


UPDATE products
SET products_price_per = REPLACE(products_price_per, 'MVD', 'DVD')
WHERE INSTR(products_price_per, 'MVD') > 0;

virker som:

for each row in products table {
if 'MVD' is found in rows products_price_per field {
rows products_price_per field = REPLACE(...)
}
}

Arne


0 new messages