2016-05-29 9 views
0

mySQLから数えて20個のアイテムが出力されています。mySQL LIstに追加

ユーザーはリストに入るアイテムを追加して削除し、アイテムのIDが連続しないようにします。それらは5,10,12,13,14,27,28,31,38,40であるかもしれない。リストは20項目に限定されている。

SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10 

このリストが画面に表示されている間、ユーザーはアイテムの追加と削除を続けます。ここの例の最後のIDの値は40です。

これらのアイテムのいくつかは削除され、新しいアイテムが追加されます。

最後の既知のIDからこのクエリを実行するにはどうすればよいですか。 WHERE ID> 40を追加しますか?LIMIT 0,10節の後にWHERE句を置くことはできますか?ここ

SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10 WHERE id > $lastid 

主なポイントは、私はすでに示した項目を表示したくない、との項目はそう間違った結果をもたらす可能性があり1,10をやって削除された場合、私は知らないです。最後に表示された項目の直後に次の10個の結果が必要です。

+0

削除したアイテムについて心配するべきではないと思います。項目の変更に基づいて項目を表示するかどうかを制御することは、本当の苦痛になります。 IDの順番を守り、ページごとにいくつかの要素を修正するだけです。次に、 'LIMIT'節でこれらの値を制御するだけです。 'LIMIT 1,10 'で始まるページの要素数を' 10 'とすると、次のページは1 + 10,10(LIMIT 11,10)になります。すべてのページ設定はこれで動作します。何が表示されるべきかを制御するには、クッキーやその他のテーブルのようなシステムに不要な複雑さを加えることが必要です –

+0

そしてリストを見ているすべてのユーザーにそれをチェックするための賢明なロジックと、 。 –

+0

ほとんどすべてのシステムのデフォルトの動作であることはわかっていても、私は答えとして追加しませんでした。 –

答えて

0

最後に取得された値idを保存し、既存のWHERE句に条件を追加します。 (LIMITの後に2番目のWHERE句を追加することはできません。これは有効ではありません。SELECTステートメントは単一のWHERE句を取得します)。

質問の質問では、DESCENDING注文。その場合は、の次のid値が最後に取得された値より小さくなるようにします。バインドプレースホルダを使用すると、プリペアドステートメントを使用していると仮定して...

あなたが上昇値で注文する場合は、...

SELECT t.* 
    FROM table t 
WHERE t.fields = vars 
    AND t.id > ? 
ORDER BY t.id ASC 
LIMIT 10 

疑問符があります。プリペアドステートメントを使用していない場合は、バインドプレースホルダの代わりにリテラルを使用します。最後に取得した値です。

idで降順に並べ替える場合、ID値がで、以前に取得した最後のものが未満の行を取得すると便利です。

取得された最後の行のid値を保持し、それをWebページの隠れた入力に入れて、フォームがポストされたときにそれを読み込むことは、まったく困難ではありません。 (ホルヘ・カンポスの誤った提案を無視してください)

+0

ありがとう。あなたは私が思っていなかった何かを私に知らせました。私は最後のものが画面の最上部に置かれているので、降順でそれらを持っていました。私はリストの一番上に追加し、古い結果を画面の下にプッシュする必要があります。または、私は注文を変更する必要があります。新規エントリを表示したままにすることが望ましいでしょう。他人と話し合うもの。私はあなたが0,10を取り出して10にしたことに気がつきました。10の既知の戻り値にページ番号を付ける必要はありません。私の場合は50または100です。 – PHPDev

+0

私は最後に1つ質問します。 where句が1つしかない場合は、LIMIT 10の後ろに置くことができます。 'select * from table desc limit limit 10 id> lastidは有効な文であるか、またはorderとlimitに先行する必要があります。 – PHPDev

+0

WHERE句は、ORDER BY句の後に指定することも、LIMIT句の後に指定することもできません。この例では、WHERE句はテーブル・リストの後でORDER BYの前にある必要があります。あなたの声明には1つの場所しかありません。 MySQL構文は、SELECT文の句の順序に非常に特化しています。 – spencer7593

関連する問題