我有一张桌子sites
,基本上是一个旅行推销员问题。我的老板想从列表中选择一堆站点,然后将它们手动排序为访问顺序。我已经寻找过类似的 问题,但它们不是针对 MySQL 的,并且那些没有 为我的情况提供合理的解决方案。我在大学里没有学过计算机科学,所以希望这对你们中的一些人来说是生计。
我想做类似下面的伪代码:
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 | |
+---------------+----------------------+------+-----+---------+----------------+