1

みなさん、こんにちは!これはそれほど難しいことではないと思いますが、MySQLの経験が浅く、これを行うための適切な方法を見つけるのに苦労しています。ばかげたことをしてしまいたくない。

そこで、順番を変えたい 食料品のリストを用意しました。
  私はそれをこのように見せたいです:

id    label    position
--    -----    --------
81    Bread    1
82    Soup     2
83    Ham      3
84    Eggs     4

positionこの方法で列を初期化するにはどうすればよいですか?

positionまた、新しい行を挿入するときにフィールドを処理するにはどうすればよいですか?
私自身はまだphpMyAdminの人なので、これを簡単に配置する必要があります。

最初は、列をそのままauto_incrementできると思っていましたが、最初の注文位置として機能することを期待して、許可されていないようです。positionidid

位置列を初期化して、新しく挿入された行を処理したら、それらを移動するのはそれほど難しいことではないと思いますか?positionフィールドを任意の2行に。でスワップする「スワップ」操作を実行することを想像していますid
  「シフトアップ」または「シフトダウン」スワップ操作は、上または下の行を取得し、position2つの連続したを実行して'UPDATE..をスワップすると想像しpositionます。私はこれを1つのクエリで簡単に行う方法を理解するのに十分なほどクールではありません(それが可能であれば)。そのため、PHPからは、力ずくでこれを達成するために複数のクエリを実行します。


私はこのような食料品リストを表示しています:
SELECT * FROM groceries WHERE 1 ORDER BY position ASC;


次のような新しい行を挿入したいと思っています。

INSERT INTO groceries (id,    label,              position) 
VALUES                (NULL,  "Instant Noodles",  NULL);

position'auto-incrementのようにフィールドを自動化できない場合id、' NULL'の代わりに、positionフィールドを何に設定する必要がありますか?position最後に追加された/最大の位置+1と同じである 新しい行を挿入するにはどうすればよいですか?最大(またはゼロ)
  を取得して1を追加するために、別のクエリを実行する必要がありますか?position

4

2 に答える 2

4

テーブルには 1 つの auto_increment 列しか設定できないため、INSERT INTO...SELECTステートメントを使用して位置の最大値をインクリメントできます。

INSERT INTO groceries (label, position) 
SELECT "Instant Noodles", COALESCE(MAX(position),0) +1
FROM groceries;
于 2013-03-10T22:49:59.757 に答える
0

JW は、新しい行に最高値を与える方法を示しました。もう 1 つの方法は、デフォルト値を 0 に設定することです。これにより、フィールドに少ない作業で値が与えられます。

于 2013-03-10T22:54:08.213 に答える