商品の表があります。この表はSELECT from X ORDER by Y
クエリで作成されました。私は連続した行数や順序(1,2,3 ..)を追加したい。MySQLクエリ - 注文/数を含むフィールドを更新しますが、別のフィールドに基づいて再び1から開始します。
ただし、商品カテゴリまたは仕入先が変更された場合、この数を1にリセットします。 (私は、製品カテゴリーとベンダーの組み合わせを照会する際に並べ替えるための命令を出します)。
この問題は、より大きな問題に関連するサブ問題の簡素化です。だから、PHPを含む他のソリューションは関係ありません。
は、ここで、サンプルテーブルです:
+--------------+------------------+-----------+-----------+
| product_name | product_category | vendor_id | sortorder |
+--------------+------------------+-----------+-----------+
| Product 1 | A | 1 | 0 |
| Product 2 | A | 1 | 0 |
| Product 3 | A | 1 | 0 |
| Product 4 | B | 1 | 0 |
| Product 5 | B | 1 | 0 |
| Product 6 | C | 2 | 0 |
| Product 7 | C | 2 | 0 |
| Product 8 | C | 2 | 0 |
| Product 9 | C | 2 | 0 |
| Product 10 | C | 2 | 0 |
+--------------+------------------+-----------+-----------+
これは、クエリが正常に実行された場合、それがどのように見えるべきかです:
+--------------+------------------+-----------+-----------+
| product_name | product_category | vendor_id | sortorder |
+--------------+------------------+-----------+-----------+
| Product 1 | A | 1 | 1 |
| Product 2 | A | 1 | 2 |
| Product 3 | A | 1 | 3 |
| Product 4 | B | 1 | 1 |
| Product 5 | B | 1 | 2 |
| Product 6 | C | 2 | 1 |
| Product 7 | C | 2 | 2 |
| Product 8 | C | 2 | 3 |
| Product 9 | C | 2 | 1 |
| Product 10 | C | 2 | 1 |
+--------------+------------------+-----------+-----------+
私は主に、この答えに関連したさまざまなクエリのTONを試してみました最初のクエリからこの結果を取得しますが、無駄になります。 Using LIMIT within GROUP BY to get N results per group?
このようなクエリを実行して注文することができます1 、2,3,10):私は1で再び開始する数である、欲しいものを達成していない
SET @pos = 0;
UPDATE testtable SET sortorder = (SELECT @pos := @pos + 1);
しかし、とき4.
製品3と製品間の「PRODUCT_CATEGORY」変更不正な構文でが、これは私が何をしたいです:いつものように
SET @pos = 0;
UPDATE testtable SET sortorder =
// { if (product_category != [last product_category]
// OR
// if (vendor_id != [last vendor_id])
// }
// THEN SET sortorder = 1
// ELSE SET sortorder = (1+ [last sortorder]
;
おかげで...
EDIT-2016年9月12日
@ Fancypantsから溶液を試してみる。実際には、最初は動作しないように見えますが、 "product_name"フィールドのソート順と関係しています。製品5は製品5の前に置かれます(1が5の前に来る)。代わりに整数フィールドを使用することでそれを説明すると、結果は完璧です。
で、それは生きて働いてご覧ください。 (私はそれをやろうと思っていた)。ありがとう、私はあなたのソリューションを試し、返信します。 – Kevin
これは私の編集で説明した調整を行った後に機能するようです。ありがとうございました!! – Kevin