2

私は mySql を使用しており、テーブルの最後にあるレコードがあります。それを表に出したい。どのようにそれを動かすことができますか?テーブルの一番上にエントリがあることを意味します。両方のエントリの ID を互いに置き換えるにはどうすればよいですか。

最後の項目をリストの先頭に移動して、Web サイトで最初に表示されるようにしたいので、これを行いたいと思います。

ありがとう

4

6 に答える 6

1

カスタムオーダーは次の方法で使用できます。

select * from mytable
order by if(id = 1234, -1, id); -- change "1234" to id of row you want first
于 2012-11-07T19:44:05.373 に答える
0

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);
   }
于 2012-11-07T19:39:53.590 に答える
0

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 回のパスで実行できるとは思いません。

于 2012-11-07T20:57:22.843 に答える
0

次のようなものが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

于 2012-11-07T19:58:28.040 に答える
0

テーブルの一番上に最後の行を表示する必要がある場合は、これを使用できます。

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)

サブクエリでテーブルを参照している場合、テーブルを更新できないためです。結合するだけで動作し、使用する別のソリューションを投稿しました!

于 2012-11-07T19:58:53.140 に答える
-1

選択クエリの単純な 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 */
于 2012-11-07T19:42:09.757 に答える