6. Juli 2013

SQL für Fortgeschrittene

6. Juli 2013 - Geschrieben von Martin - Keine Kommentare

Eine Zeile ohne Kollisionen durch andere möglicherweise Zeitgleiche Abfragen ändern und zugleich noch die ID dieser bekommen?

SET @update_id := NULL;
UPDATE residata_jobs_jobs AS job
SET
	job.inProgress = TRUE,
	job.id = (SELECT @update_id := job.id)
WHERE
	job.id = (
		SELECT id FROM (
			SELECT subjob.id
			FROM residata_jobs_jobs AS subjob
			WHERE
				subjob.inProgress = FALSE
			ORDER BY subjob.queueTime ASC
			LIMIT 1
		) AS T
	);
SELECT @update_id;

Jetzt muss ich das nur noch per Native Query in Doctrine2 einbauen… DQL (Doctrine Query Language) habe schon abgeschrieben als ich festgestellt habe, dass anonyme Subquerys nur sehr sehr eingeschränkt funktionieren.