0

MySQLをデータベースとして使用しています。

今ではすべてが正しく機能していますが、クライアントがWebサイトでフィルターを使用したいので、正確に何をする必要があるのか​​、それを行うための最良の方法は何かという問題に直面しています。

これが私のデータです(可能な限り単純化します)

id  name  price  nr.bed  nr.bath
---------------------------------
1     a     33     2        4
2     b    100     5        1
3     c    102     2        2 
4     d     85     1        1
5     e     37     6        4 
6     f     19     2        1 

したがって、初めてページをロードするときは、このクエリを使用してデータベースから最初の5つを取得しています。

SELECT * FROM hotel LIMIT 5

そして私はこれを手に入れます:

id  name  price  nr.bed  nr.bath
---------------------------------
1     a     33     2        4
2     b    100     5        1
3     c    102     2        2 
4     d     85     1        1
5     e     37     6        4 

その後、私はこれを呼び出すたびに:

SELECT * FROM hotel WHERE id>'last_id(in this case 5)' LIMIT 5

そして私は得ています:

id  name  price  nr.bed  nr.bath
--------------------------------- 
6     f     19     2        1 

等々...

しかし今、私はフィルターを使用する必要があります例えば私は価格のためのフィルターを持っています

だから私は次のようなものが必要です:

SELECT * FROM hotel where id>5 order by price desc LIMIT 5

idしかし、その後、IDの注文を失い、すべてが価格で注文されているため、ホテルと比較できないため、データベースから次の5つを取得できません。

どうすればこれを達成できますか?別の列など、注文をそのまま維持するものを追加する必要がありますか?すべては、テーブルのIDを使用してWebサイトに表示されます。

編集:

idをascで注文し、priceをdescで注文する必要があるため、それが可能かどうかはわかりませんが、別の列などを追加せずにこれら2つを組み合わせることができるかどうかはわかりません。

EDIT2:

このようなものを手に入れたい

id  id_copy  name  price  nr.bed  nr.bath
-----------------------------------------
 1      3     c     102     2        2 
 2      2     b     100     5        1
 3      4     d      85     1        1
 4      5     e      37     6        4 
 5      1     a      33     2        4
 6      6     f      19     2        1
4

3 に答える 3

0

次に、2つの列を注文します。

SELECT * FROM hotel where id>5 order by price desc , id asc LIMIT 5
于 2013-03-05T13:46:01.080 に答える
0

私はこれがあなたが探しているものだと思います

   SELECT * FROM hotel  order by price desc limit 0 ,5

その後、次の 5 が必要な場合

 SELECT * FROM hotel  order by price desc limit 5 ,5

それから

   SELECT * FROM hotel  order by price desc limit 10 ,5

等々...

あなたはそのようなphpでこれを作ることができます

   $sql="SELECT * FROM hotel  order by price desc "

if (sombutton is clicked) {
          $sql .= " limit 0,5" ;}
 if (sombutton is clicked){ 
                       $sql .= " limit 5,5" ; }

$iまたは、5を追加するたびに変数を使用してループすることもできます.

于 2013-03-05T14:46:33.757 に答える
0

まず、順序が重要な場合はlimitwithout を使用しないでください。order byクエリは次のようになります。

SELECT *
FROM hotel
WHERE id>'last_id(in this case 5)'
ORDER BY id
LIMIT 5

あなたの質問には、サブクエリが必要です:

select *
from (SELECT * FROM hotel where id>5 order by price desc LIMIT 5
     ) t
order by id

内部クエリは価格で 5 を選択します。外側のものは id で注文します。

offsetこれを「ページネーション」に使用する場合は、 の引数に慣れる必要がありますlimit。これについては、MySQL のドキュメントで説明されています

于 2013-03-05T14:24:08.147 に答える