W dniu 4 czerwca 2012 22:43 użytkownik Szymon Kajewski lysysoft@o2.plnapisał:
Niestety nie da się tego użyć w jednym zapytaniu do modyfikacji, bo nie można zmieniać tabeli do której odnosi sie zapytanie. - Sypie błędami "You can't specify target table 'nodes' for update in FROM clause" użycie np vnodes nie pomaga - mysql jest zabezpieczony przed tym.
a jednak się da w jednym zapytaniu :)
UPDATE nodes n1,( SELECT n.id FROM nodes n LEFT JOIN nodeassignments ON n.id = nodeassignments.nodeid LEFT JOIN assignments ON nodeassignments.assignmentid=assignments.id WHERE (assignments.dateto > unix_timestamp() or assignments.dateto='0' ) AND assignments.datefrom < unix_timestamp() AND assignments.suspended = 0 AND access = '0' AND (SELECT SUM(value) FROM cash WHERE customerid = n.ownerid) >= 0 ) AS n2 SET n1.access=1, n1.warning=0 WHERE n1.id = n2.id
i to mi wyłapuje jak narazie dobrze :)