GÜNCELLEME gerçekleştirin ve tek sorguda bir kullanıcı değişkeni ayarı

3 Cevap php

Php mysql_query komutu ile herkes tanıdık, bize (ayrılmış, sınırlayıcı) bir sorgu daha gerçekleştirmek için izin olmadığını bilir bir çağrıda ...

My problem is that I wan't to be able to define a user variable in my UPDATE query so that I increment it for each row (kinda like auto increment). It should look like something as this:

SET @t1=0;
UPDATE `mytable` SET `order` = (@t1:=(@t1+1)) ORDER BY `order` ASC;

My problem is that, since I can't define my variable and then make the update, I can't find a way to set the variable inside the query. I've tried to define it if it was NULL:

... `order` = (IFNULL( @t1 := ( @t1 + 1 ) , @t1 := 0 )) ...

ama bunun üzerinde çalışıyor, her satırda değişken sıfırlar beri çalıştı olmadı.

Anyone familiar with mysql that see's a solution? Thanks in advance.

3 Cevap

Eski bir soru ama burada bir cevap zaten var:

UPDATE `mytable` SET `order` = (@t1 := IFNULL(@t1, 0) + 1) ORDER BY `order` ASC;

IFNULL(@t1, 0) 0 döndürür @t1 bir değer yoksa veya bir değeri varsa @t1 değerini döndürür.

Yani ilk satırda @t1 set değil ve @t1 zaten her satırı bir değeri vardır ve 1 ekler order = (@t1 := 0 + 1) olarak ve aşağıdaki satırlarda günceller.

Eğer mysqli kütüphanesini kullanabilirsiniz, bunu kullanarak bir sorguda birden querys sağlar

mysqli->multiple_query( string $querys);

http://us.php.net/mysqli_multi_query

Bir uzuv, nasıl dışarı gidiyor ...

... `order` = (SELECT `order`+1 FROM `mytable` ORDER BY `order` DESC LIMIT 1)

ya da bir alt sorgu olarak böyle bir şey? ... Ben öyle, eğer daha önce en yüksek order değerini seçmek ve artmalıdır her güncellemeden sonra sorgu yeniden çalışır olsun, ama emin değilim?