Выполните ОБНОВЛЕНИЕ и настройку пользовательской переменной в одном запросе
Каждый, кто знаком с командой php mysql_query, знает, что она не позволяет нам выполнять более одного запроса (разделенного; разделителем) за один вызов...
Моя проблема в том, что я не смогу определить пользовательскую переменную в своем запросе UPDATE, чтобы я увеличивал ее для каждой строки (что-то вроде автоматического увеличения). Это должно выглядеть примерно так:
SET @t1=0;
UPDATE `mytable` SET `order` = (@t1:=(@t1+1)) ORDER BY `order` ASC;
Моя проблема в том, что, поскольку я не могу определить свою переменную, а затем выполнить обновление, я не могу найти способ установить переменную внутри запроса. Я пытался определить это, если это было NULL:
... `order` = (IFNULL( @t1 := ( @t1 + 1 ) , @t1 := 0 )) ...
но это не сработало, поскольку переменная сбрасывается в каждой строке, с которой она работает.
Кто-нибудь знаком с MySQL, который видит решение? Заранее спасибо.
3 ответа
Старый вопрос, но в любом случае вот ответ:
UPDATE `mytable` SET `order` = (@t1 := IFNULL(@t1, 0) + 1) ORDER BY `order` ASC;
IFNULL(@t1, 0)
возвращает 0, если @t1
не имеет значения или возвращает значение @t1
если это имеет значение.
Итак, на первом ряду @t1
не установлен и обновляется как order = (@t1 := 0 + 1)
и в следующих строках @t1
уже имеет значение и добавляет +1 к каждой строке.
Вы можете использовать библиотеку mysqli, она позволяет использовать несколько запросов в одном запросе, используя
mysqli->multiple_query( string $querys);
Выходя на конечности, как насчет...
... `order` = (ВЫБЕРИТЕ`order`+1 ИЗ `mytable` ORDER BY `order` DESC LIMIT 1)
или что-то подобное в качестве подзапроса?... Я не уверен, что подзапрос перезапускается после каждого обновления, но если это так, он должен выбрать ранее самый высокий order
значение и увеличить его?