У меня есть таблица 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 | |
+---------------+----------------------+------+-----+---------+----------------+
CASE WHEN ... THEN ...
будет работать для меня, но не автоматически. Мне пришлось бы вычислять каждое значение THEN в цикле PHP, а не передавать его на сервер MySQL. Я искал более лаконичный синтаксис. - person Nicholas Shanks   schedule 18.07.2011