Обновление последовательности строк

У меня есть таблица sites и в основном задача коммивояжера. Мой босс хочет выбрать кучу сайтов из списка, а затем отсортировать их вручную в порядке посещения. Я искал похожие вопросы, но они были нацелены не на MySQL, а на те которые были не t обеспечить разумное решение для моей ситуации. Я не занимался компьютерными науками в университете, так что, надеюсь, для некоторых из вас это будет хлебом насущным.

Я хотел бы сделать что-то вроде следующего псевдокода:

UPDATE sites SET run_order=0 WHERE selected='false';
UPDATE sites SET run_order=AUTO_SEQUENCE(DESC FROM 6) WHERE site_id=SEQUENCE(23,17,9,44,2,14);

Последний из них будет иметь тот же эффект, что и:

UPDATE sites SET run_order=6 WHERE site_id=23;
UPDATE sites SET run_order=5 WHERE site_id=17;
UPDATE sites SET run_order=4 WHERE site_id=9;
UPDATE sites SET run_order=3 WHERE site_id=44;
UPDATE sites SET run_order=2 WHERE site_id=2;
UPDATE sites SET run_order=1 WHERE site_id=14;

Поскольку я запускаю это через PHP, я не хочу создавать много отдельных запросов, хотя количество сайтов, которые мой босс может посетить за день, конечно, ограничено двигателем внутреннего сгорания.
Моя таблица SQL выглядит так:

+---------------+----------------------+------+-----+---------+----------------+
| Field         | Type                 | Null | Key | Default | Extra          |
+---------------+----------------------+------+-----+---------+----------------+
| site_id       | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| ...           |                      |      |     |         |                |
| selected      | enum('false','true') | NO   |     | false   |                |
| run_order     | int(10) unsigned     | NO   |     | 0       |                |
+---------------+----------------------+------+-----+---------+----------------+

person Nicholas Shanks    schedule 18.07.2011    source источник
comment
Что не так с этим ответом? Это для MySQL и только один оператор.   -  person Jacob    schedule 18.07.2011
comment
Принятый ответ на этой странице, синтаксис CASE WHEN ... THEN ... будет работать для меня, но не автоматически. Мне пришлось бы вычислять каждое значение THEN в цикле PHP, а не передавать его на сервер MySQL. Я искал более лаконичный синтаксис.   -  person Nicholas Shanks    schedule 18.07.2011


Ответы (1)


Я думаю, что это код, который вы ищете.

http://www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-other-values-and-a-single-sql-query/

person Matt    schedule 18.07.2011
comment
Спасибо, Мэтт, но это не происходит автоматически, и похоже, что это то же самое, что и первый вопрос, на который я ссылался в своем собственном вопросе. - person Nicholas Shanks; 18.07.2011
comment
Прочитайте до конца, разница в том, что они показывают, как вы можете использовать php для генерации одного оператора sql для выполнения всех обновлений. Единственный другой способ, который я могу придумать, - это создать временную таблицу и присоединиться к ней в обновлении, но этот способ кажется намного проще и, следовательно, лучше. - person Matt; 18.07.2011