id ophalen na update.

Status
Niet open voor verdere reacties.

hmobron

Gebruiker
Lid geworden
5 okt 2006
Berichten
21
Beste,

ik heb na googlen eindelijk (bijna) gevonden wat ik zocht.

Na dat ik een rij heb geupdate, direct het id ophalen van de betreffende rij, echter de update wordt niet werkelijk gedaan.

PHP:
SET @uids := '';
UPDATE product
SET status = 0
WHERE model= '107240'
AND ( SELECT @uids := CONCAT_WS(',', @uids, product_id) );
SELECT TRIM(LEADING ',' FROM @uids)

Hij geeft hier mee aan dat product_id 50 de rij die geupdate moet worden, maar de status blijft 1.

Wie weet wat hier niet klopt. Ik heb het product_id nodig om andere tabellen ook te updaten.
 
Dit update ook alleen als het model klopt en het mogelijk is om @uids gelijk te stellen aan iets, maar dat gelijkstellen is helemaal geen voorwaarde voor de update dus ik gok dat het sowieso niet gaat werken.

Wat je denk ik beter kunt doen is SQL gebruiken zoals het hoort:
[sql]
BEGIN;
SELECT FOR UPDATE id FROM product WHERE status <> 0 AND model='107240'; // records waar de status al nul is worden niet aangepast, dus wil je ook niet selecteren.
// Dan hier je ID's uitlezen
UPDATE product SET status=0 WHERE model='107240';
COMMIT;
[/sql]
Dit selecteert de records die je wilt bewerken en lockt ze zodat geen andere processen bij de records kunnen tot jij ermee klaar bent.
Daarna kun je gewoon PHP code gebruiken om de id's op te halen (en niet dat malle geklier met komma'separated strings...)
en daarna komt de daadwerkelijke UPDATE query die de status aanpast.
Dit alles moet in een transactie, maar je draait updates altijd in een transactie... toch?

En ik weet dat het zelden gewaardeerd wordt als ik het zeg, maar dit soort dingen zijn PostgreSQL een peulenschil:
UPDATE products SET status=0 WHERE model='107240' RETURNING id;
Dat doet de update en geeft een resultset terug met de id's van alle geraakte records.
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan