0

カスタム設定に基づいて行を再配置する必要があります。

テーブルの構造はこんな感じです。

id(primary)    top    title
1              2      t1
2              1      t2   
3              5      t3  
4              3      t4 
5              4      t5     

結果が表示され、結果は次のようにORDER BY top ASCなります。

id(primary)    top    title
2              1      t2
1              2      t1   
4              3      t4  
5              4      t5 
3              5      t3

次に、この行を一番上に移動して、結果から1行を削除します。

id(primary)    top    title
6              NULL   t6

そして、このような結果を表示するために、列(上)を変更/プッシュワンプレースダウン/再割り当てします。

id(primary)    top    title
6              1      t6
2              2      t2
1              3      t1   
4              4      t4  
5              5      t5 

IEの以前のすべての上位の行は、1つの場所にプッシュダウンされ、行id=3 with top=5はのように削除されid=3 with top=NULLます。

これを行う簡単な方法は、column(top)を目的の設定に再割り当てすることです。これは、処理する行が数百あるため実行できません。そのため、これには自動化されたロジックが必要です。

これを行うための可能な方法を見て、提案してください。

4

5 に答える 5

1
select
  id,
  case when id=6 then 1 else top+1 end top,
  title
from
  your_table
where
  id=6 or
  top!=(select max(top) from your_table where id!=6)
order by top
于 2013-01-16T13:55:57.787 に答える
0
array_pop( $results ); // Remove last row
array_unshift( $results, $new_row ); // Add new row to the beginning
foreach( $results as $index => &$value )
    $value['top'] = $index+1; //Reassign top so that it matches the index of the numerical array, which will always start counting from zero
于 2013-01-16T13:20:14.353 に答える
0

これらの線に沿った何か、おそらく:

select id, ifnull(top, 0)+1, title from theTable order by 2
于 2013-01-16T13:23:06.610 に答える
0
SELECT *
  FROM
  (
    SELECT ID, @TOP := @TOP + 1 Top, TITLE
    FROM table1 a, (SELECT @TOP := 1) r
    ORDER BY a.TOP
  ) s
UNION 
SELECT 6, 1, 't6'
ORDER BY TOP
LIMIT 5
于 2013-01-16T13:28:48.993 に答える
0
SELECT * FROM theTable ORDER BY id = {the id you want on top} DESC, top ASC

または上に複数ある場合

SELECT * FROM theTable ORDER BY id in (id,id,id) DESC, top ASC
于 2013-01-16T13:33:08.243 に答える