私はテーブルの最初の30行を選択:MySQLの最後のn行を選択するには?このコードで
SELECT * FROM `table` LIMIT 0 , 30
をしかし、どのように順序を変更せずに、最後の30を選択するには?
私はテーブルの最初の30行を選択:MySQLの最後のn行を選択するには?このコードで
SELECT * FROM `table` LIMIT 0 , 30
をしかし、どのように順序を変更せずに、最後の30を選択するには?
誰もが、この部分が欠落しているように見えます:
しかし、どのように、最後の30を選択するには、順序を変更せずに?
まず、提供されたクエリには順序がありません。順序は、いくつかのフィールドに昇順され、これは@DannyFoxを意味し、クエリだろうと仮定:
SELECT * FROM T
ORDER BY val
LIMIT 3
:
SELECT * FROM T
ORDER BY val
LIMIT 0 , 30
は、今、私たちは、このようなa, b, c, d, e
などのデータを、簡素化され、我々はわずか3行の代わりに、30をしたいことをしていると想像
これが返された場合:a, b, c, d, e
各行には、その後、彼はその順序でc, d, e
を得ることを期待します。誰もが提供しているクエリ:
SELECT * FROM T
ORDER BY val desc
LIMIT 3
返されるのはe, d, c
です。この問題は、実際に元の注文を変更していることであり、OPは注文を変更したくないと言います。だから、技術的には、c, d, e
につながるクエリは次のとおりです。実際には、元の順序を取得し、二度の順序を変更する
select * from (
select * from t
order by val desc
limit 3
) s
order by val
。
私はあなたにそれを打つように見えるが、私のように考えて+1する。 :) – Shef
LOL、+1もあなたのために:) –
多分これは動作します:select * from table WHERE id > ((SELECT MAX(id) from table) - 30);
最後の30個のレコードの一部が削除され、そのIDが自動インクリメンタルである場合、30個未満の結果が得られます。 –
ええ、それはおそらく大きなものです。特にIDの間に隙間があるとします。 'ORDER BY'節はプロ解決策であり、それ以上のことはありません。 – Shef
この回答は、テーブルの構成について多くのことを前提としています。 –
あなたが自動増分キー/列を持っている場合は、id
はその後、ここにあなたが順序を指定する必要があります例
SELECT * FROM `table` ORDER BY id DESC LIMIT 0 , 30;
初だと言う:
SELECT * FROM table
ORDER BY some_id ASC -- ascending order
LIMIT 30
このクエリで最初の30個の列が返された場合、最後の30個の列が返されます。
SELECT * FROM table
ORDER BY some_id DESC -- descending order
LIMIT 30
あなたが発注を避けるためにしようとしているので、その解決策は、それを2回適用することであろう。
SELECT *
FROM (
SELECT *
FROM `table_name`
ORDER BY `column_name` DESC -- maybe id?
LIMIT 0, 30
) `table_aliase`
ORDER BY `column_name` ASC
オーダーについては何も言われていないので、ORDER BYは使用できません。 あり与えられた点からレコードを取得する方法ですが、そのためにあなたは、その後、私の方法は、PHPで使用しています制限
ここSELECT COUNT(*) AS counted FROM table
SELECT * FROM table LIMIT (counted-30),30
を提供するために、このカウント値が使用されているレコード数を知っておく必要があります。
$query = "SELECT * FROM table ORDER BY id DESC LIMIT 3";
$res = mysql_query($query);
$results = array();
while($row = mysql_fetch_assoc($res)){
$results = $row[field];
}
// Back to original order based from DB
$results = array_reverse(results);
ここでは、任意の順序を持っていません。 –
テーブルには、データを並べるために使用できるフィールドがありますか?おそらくTIMESTAMP列または自動増分INT列? –