修正が必要なやや複雑な問題があります。今のところ、次のテーブル構造 (task_schedule) があります。
id taskid productid product_position
1 1 1 1
2 2 1 2
3 3 2 1
4 4 1 3
5 5 2 2
6 6 3 1
product_positionは次のように機能します: productid を見て、前の最大値エントリからインクリメントする必要があります。
私は次のクエリでこれを達成します (おそらく理解しやすいでしょう):
INSERT into task_schedule (taskid, productid, product_position)
SELECT 1,1, max(product_position) + 1
FROM task_schedule
WHERE productid=1
(値はもちろん php バックエンドに帰属します)
ただし、今は新しい列が必要です。これをuser_positionと呼びましょう。例を使用してテーブルを再作成します。
id taskid productid product_position user_position
1 1 1 1 1
2 2 1 2 4
3 3 2 1 2
4 4 1 3 6
5 5 2 2 5
6 6 3 1 3
さて、これがどのように機能するか: user_position は各エントリを個別に実行し、productid を確認し、偶数の優先順位に基づいて位置リストを作成する必要があります。
したがって、これを user_position で注文すると、次のエントリ ID リストが得られます: 1 3 6 2 5 4
私がphpで行う必要があることの例:
次のリストを想像してください:赤 赤 赤 緑 緑 緑 緑 青 青 黄
$array1 = array(array("red"), array("red"), array("red"));
$array2 = array(array("green"), array("green"), array("green"), array("green"));
$array3 = array(array("blue"), array("blue"));
$array4 = array(array("yellow"));
$Arrays= array ($array1, $array2, $array3, $array4);
foreach ($Arrays as $type => $list) {
$ArrayLength[]=count($list);
}
$MergeArray=array();
$flag=true;
for($i=0;$flag==true;$i++)
{
$flag=false;
for($j=0;$j < count($ArrayLength);$j++)
{
if( $i < $ArrayLength[$j] )
{
array_push( $MergeArray , $Arrays[$j][$i] );
$flag=true;
}
}
}
echo "<pre>".Print_r(json_encode($MergeArray), true)."</pre>";
これは、私が望むパターンで一貫したリストを返します:
[["red"],["green"],["blue"],["yellow"],["red"],["green"],["blue"],["red"],["green"],["green"]]
上記はすべて必要なものの例にすぎませんが、MySQL を介して実装されています。
この問題にアプローチする方法さえわかりませんが、新しいエントリを挿入し、それに応じて user_position 列を更新する方法が必要です。
新しい peoduct_id を使用してテーブルに新しいエントリを追加すると、最終結果は次のようになります。
id taskid productid product_position user_position
1 1 1 1 1
2 2 1 2 5
3 3 2 1 2
4 4 1 3 7
5 5 2 2 6
6 6 3 1 3
7 7 4 1 4
新しい行に合わせて user_position がどのように移動したかに注目してください。
これは解決するのがかなり複雑な問題だと思います (または、私の mysql が弱いだけかもしれません)。これに対する簡単な解決策はないと思います。大変な作業を行うのは素晴らしいことですが)、複数のクエリなどを使用した PHP ソリューションも歓迎します。残念ながら、この列を削除することはできません。エントリを取得して、PHP に情報を並べ替えるのは簡単ですが、これをデータベースに実装する必要があります。
コミュニティからの意見は本当に素晴らしいものです。