私はテーブル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 経由で実行しているので、上司が 1 日にアクセスできるサイトの数はもちろん内燃エンジンによって制限されますが、多くの個別のクエリを発行する必要はありません。
私の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 | |
+---------------+----------------------+------+-----+---------+----------------+