Cytat
w jednym zapytaniu przez parser php nie zrobisz tego
Owszem, zrobi.
Cytat
już wyjaśniam dlaczego ...
1)obsługuje on tylko pojedyncze zapytanie np:
[php:1:b8891e0d20]<?php
$query="select * from tabela";
mysql_query($query,$dblink);
?>[/php:1:b8891e0d20]
jest poprawne, ale cos takiego już nie:
[php:1:b8891e0d20]<?php
$query="SELECT * FROM tabela; UPDATE tabela SET costam;";
mysql_query($query,$dblink);
?>[/php:1:b8891e0d20]
2) problem u ciebie polega na tym ze zapytanie serwer mysql interpresuje nastepujaco:
[sql:1:b8891e0d20]
UPDATE Moja_Tabela SET a = b;UPDATE Moja_Tabela SET b = a;
[/sql:1:b8891e0d20]
czyli najpierw kolumnie a przypisuje b czyli a=b a nastepnie b przypisuje a(które już równe jest

wiec masz dwie kolumny o wartosci b;
Nieprawda. Nadal jest to interpretowane jako jedno zapytanie, tylko że MySQL wartościuje wyrażenia od lewej do prawej i stąd się bierze błąd.
Cytat
żeby to rozwiazać musisz zapisać najpierw jedna wartosc do zmiennej, np. tak:
[sql:1:b8891e0d20]select @zmienna:=a from tabela;update tabela set a=b, b=@a;
[/sql:1:b8891e0d20]
i to napewno spelni to co chcesz zrobic, tylko podkreslam w parserze php musisz zadac to jako dwa osobne zapytania do serwera
Tak, tylko, że w tym przypadku mając dwa zapytania, musimy już tworzyć sami transakcję.
Przykładowe rozwiązanie za pomocą jednego zapytania:
[sql:1:b8891e0d20]update tabela set a=(@a:=a),a=b,b=@a[/sql:1:b8891e0d20]
PS. Problem tego typu nie występuje np. w PostgreSQLu i innych bardziej rozbudowanych bazach.