Meerder velden in een x updaten.

  • Onderwerp starter Onderwerp starter baws
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

baws

Terugkerende gebruiker
Lid geworden
9 apr 2010
Berichten
1.258
Hallo,

Ik heb een string (php) als volgt $waarde = "1"; of als het meerdere zijn $waarde = "1,3,6";

Wat ik wil doen is een query maken die dan de waardes update.
Wat ik heb:

$query = "UPDATE materiaalCategorie SET Voorraad = '1' WHERE MCId IN '$waarde'";


Dit werkt niet, ook niet las ik de in weg laat.

Weet iemand hoe ik meerdere RECORDS in eens kan updaten?
 
Laatst bewerkt:
In je voorbeeld update je maar 1 veld (Voorraad) dus ik denk dat je meerdere records bedoeld?
 
Even haakjes om de waardes van je "IN" en het probleem is opgelost :)

[sql]
UPDATE materiaalCategorie
SET Voorraad = 1
WHERE MCId IN (1,2);
[/sql]
http://sqlfiddle.com/#!2/23881/1
 
Controleer wel wat er gebeurt als deze query mislukt. Bij een IN statement kun je niet achterhalen welke van de waarden uit het IN statement het probleem gaf en bij MySQL weet je amper zeker welke records er bij een fout wel en niet zijn bijgewerkt. MySQL heeft er een handje van om gewoon zoveel mogelijk wel te updaten en te stoppen bij de eerste fout en omdat het een IN statement is geef je ook geen verwerkvolgorde op. In principe kan het dus gebeuren dat je zegt "UPDATE ... WHERE id IN (1,2,3,4) en dat er een fout optreed bij '2', en dat 1 en 4 al wel zijn bijgewerkt en 3 nog niet.

Plaats dus *altijd* een transactie rond dit soort updates, controleer of de query gelukt is en rollback als dat niet het geval is. Alleen zo weet je zeker wat er gebeurt is. (nouja, tenzij je MyISAM gebruikt, of tijdens de transactie per ongeluk weer BEGIN uitvoert... maar dat zijn MySQL-specifieke dingen, daar hebben echte databases geen last van.)
 
Dus hoe zou volgens jou deze query moeten worden gemaakt? (Afgezien van het feit dat je een andere database zou gebruiken) :)
 
Dus hoe zou volgens jou deze query moeten worden gemaakt? (

Hangt af van hoe groot je database is en hoeveel waarden er in de IN komen te staan. WHERE g IN(1,2,3) is in principe niets anders dan WHERE g=1 OR g=2 OR g=3 en een OR kan de database alleen oplossen door een indexscan te doen. Drie OR waarden is dus 3x een indexscan en dat scheelt niet zoveel meer met losse queries.

Ik zou dus eerder kiezen voor een lus die elk record afzonderlijk update, als er dan één faalt weet ik precies bij welke het mis ging.

maar het minimale wat je zou moeten doen is:

draai query: "BEGIN"
draai query: UPDATE ... WHERE id IN (1,2,3,4,5)
Kijk of de query foutmeldingen gaf.
Als er foutmeldingen zijn: ROLLBACK om zeker te weten dat er niets wordt opgeslagen.
Als er geen foutmeldingen zijn: COMMIT om de veranderingen op te slaan.

En controleren of je tabel InnoDB is.
 
Het is opgelost met de haakjes, maar over de mogelijkheiden.
Misschien is het slimmer om een in array te zette en dan door de array te loopen dan zovel or statements achter elkaar.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan