2012-03-02 3 views
1

У меня есть таблица sql со статьями в ней. Я сохранил порядок статей в поле INT в sql.
С помощью столбца ajax из (перетаскивания) UI, я получил массив с целыми числами (новый порядок).
пример:
Старый заказ: 2,1,3,4
Новый порядок должен быть: 2,1,4,3
PHP:
PHP/MySQL Обновление порядка

$i = 1;  
foreach ($inputarray as $var) : 
     if ($i != $var) : 
      $this->_sqli->query("UPDATE articles 
    SET artorder=$i WHERE artorder = $var and pagesid = $pagesid"); 
     endif; 

    $i++; 
endforeach; 

Проблема: когда я пытаюсь поменять элементы, они будут одинаковыми. Таким образом, результат предыдущего примера будет: 2,1,4,4 Как мне обновить свой sql?

ответ

1

Это не будет работать до тех пор, как «artorder» является уникальным ключом, который используется при обновлении строки. Это связано с тем, что вы столкнетесь с ситуациями, когда арт-ордер одинаковый в двух строках; таким образом, у вас больше нет уникального ключа. Просто добавьте первичный ключ в таблицу и используйте это в своих операциях UPDATE:

ALTER TABLE articles ADD articleId INT(5) NOT NULL, 
ADD PRIMARY KEY (articleId) 
1

Вам необходимо передать старый заказ, а также новый заказ. Тогда вы могли бы написать

$sz = count ($inputarray); 
for ($i = 0; $i < $sz; ++$i): 
    // $oldarray holds the old order 
    if ($oldarray[$i] != $inputarray[$i]) : 
     $this->_sqli->query("UPDATE articles 
     SET artorder=" . $inputarray[$i] . " WHERE artorder = " . $oldarray[$i] . " and pagesid = $pagesid"); 
     endif; 
endfor; 
+0

У меня получился тот же результат. :( – appl3r

+0

Да, я просто понял, в чем проблема. Используя ваш пример, на третьей итерации он меняет artorder на 4 из 3 - так что есть две строки wth artorder = 4. На 4-й итерации он изменяет все значения artorder От 4 до 3 :(Doh! Есть ли другой способ однозначно ссылаться на строки, отличные от artorder? Я думаю, вам понадобится это, чтобы избежать проблемы с обновлением того же столбца, который вы используете для выбора. –

+0

Я собираюсь попробовать его с идентификатором , благодаря. – appl3r

Смежные вопросы