私は mySql を使用しており、テーブルの最後にあるレコードがあります。それを表に出したい。どのようにそれを動かすことができますか?テーブルの一番上にエントリがあることを意味します。両方のエントリの ID を互いに置き換えるにはどうすればよいですか。
最後の項目をリストの先頭に移動して、Web サイトで最初に表示されるようにしたいので、これを行いたいと思います。
ありがとう
カスタムオーダーは次の方法で使用できます。
select * from mytable
order by if(id = 1234, -1, id); -- change "1234" to id of row you want first
DB内のデータの構造を変更したくないと仮定すると...
結果セットの配列を取得し、PHP でこれを行います。リスト内の 1 つの項目の順序のみを変更する場合は、SQL で変更しないでください。
$resultSet = $connection->query("some query");
if(is_array($resultSet)){
//pop the last item in array out of array
$itemToMove = array_pop($resultSet);
//insert the item at the start of the array
array_unshift($resultSet, $itemToMove);
}
SELECTだけを使用したソリューションをすでに投稿しましたが、UPDATEを使用できるかどうかはわかりませんでしたが、その方法を見つけました。
私はそれが少し奇妙であることを知っていますが、それが常に機能し、常に1つのクエリを使用して、それらの値を知らずに最初id
と最後を交換する唯一のソリューションだと思います:id
update
your_table
inner join (select max(id) as max from your_table) mx
inner join (select min(id) as min from your_Table) mn
on your_table.id = mx.max
or your_table.id = mn.min
set id=if(id=mx.max,mn.min,mx.max)
または、最後の1つを一番上に置き、1行おきに移動する必要がある場合は、次のように機能する可能性があります。
update your_table
inner join (select max(id) as max from your_table) mx
inner join (select min(id) as min from your_table) mn
set id=if(your_table.id=mx.max,mn.min,id+1)
ただし、id が主キーの場合、これは機能しない可能性があることに注意してください。その場合、1 回のパスで実行できるとは思いません。
次のようなものがSELECT * FROM data ORDER BY id
あり、id 50 id 1 を作成したいと考えていると思います。次の 2 つのステートメントが役立ちます。
UPDATE data SET id = id + 1 ORDER BY id DESC;
UPDATE data SET id = 1 WHERE id = 51;
最初のステートメントですべての ID に 1 を追加したため、2 番目のステートメントで ID 51 を更新する必要があることに注意してください。
SELECT に ORDER 句が含まれていない場合 (必要な場合)、これも実行します。
ALTER TABLE data ORDER BY id;
お役に立てれば。
よろしく
TC
テーブルの一番上に最後の行を表示する必要がある場合は、これを使用できます。
SELECT *
FROM your_table
ORDER BY id = (select id from your_table order by id desc limit 1) DESC, id
サブクエリは常に最後の ID を返します (使用することもできますmax(id)
)。条件が満たされた場合は値が 1、それ以外の場合は 0 であるDESC
ため、条件が満たされた行が最初に移動されます。
交換されたIDも表示する必要がある場合、これはアイデアかもしれません:
SELECT IF(id=1,
(select max(id) from your_table),
if(id=(select max(id) from your_table),1,user_id)) as id
FROM your_table
ORDER BY id
(最初id
は常に1
? そうでない場合は、両方1
をに置き換える必要がありますselect min(id) from your_table
)
しかし、行を別の順序で表示するだけでなく、本当に値を交換したいですか? 残念ながらMySqlでは、これを行うことはできません:
UPDATE your_table SET id = (select max(id) from your_table) + 1 WHERE id = 1
UPDATE your_table SET id = 1 WHERE id = (select max(id) from your_table) - 1
UPDATE your_table SET id = id-1 WHERE id = (select max(id) from your_table)
サブクエリでテーブルを参照している場合、テーブルを更新できないためです。結合するだけで動作し、使用する別のソリューションを投稿しました!
選択クエリの単純な ORDER BY ではニーズが満たされないので、テーブルに 123 行を超える行があると仮定して、id = 123 の行を行 id = 1 に物理的に置き換える方法を次に示します。
update table_name set id=(select max(id)+1) from table_name where id=123;
/* this will move the last record to somewhere temporary */
update table_name set id=123 where id=1 ;
/* this will move the first row to the place of the row that was at the bottom */
update table_name set id=1 where id=(select max(id) from table_name);
/* moving from temporary row to the first of the table */