2
SELECT *
FROM `cms_goods`
WHERE rank < 20
     OR rank > 20
LIMIT 10

このコードは、20 未満のランク フィールドの 10 レコードのみを返します。クエリで、より小さいレコードとより大きいレコードの両方を表示する必要があります。(制限10)

4

5 に答える 5

5

ユニオンを試してください:

SELECT * FROM `cms_goods` WHERE 
rank < 20 LIMIT 5
UNION ALL
SELECT * FROM `cms_goods` WHERE 
rank > 20 LIMIT 5
于 2013-03-04T18:36:41.540 に答える
5

You can use a UNION ALL

(SELECT * FROM `cms_goods` WHERE rank < 20 LIMIT 5)
UNION ALL 
(SELECT * FROM `cms_goods` WHERE rank > 20 LIMIT 5)
于 2013-03-04T18:37:12.073 に答える
2

最良の方法は、数ミリ秒節約できるサブクエリを実行することでしたが、残念ながら、mySQL はサブクエリで LIMIT 機能をまだサポートしていません。

したがって、最良のオプションは、次のようなユニオンを使用することです。

SELECT * FROM `cms_goods` WHERE 
rank < 20 LIMIT 5
UNION ALL
SELECT * FROM `cms_goods` WHERE 
rank > 20 LIMIT 5

例えば:

$query = mysq_query("SELECT * FROM `cms_goods` WHERE rank < 20 LIMIT 5 UNION ALL SELECT * FROM `cms_goods` WHERE rank > 20 LIMIT 5");

説明: 最初のクエリは上位 5 つの結果を取得し、最後のクエリは下位 5 つの結果を取得し、UNION ALL はそれらを 1 つの結果に結合します。

PS: コメントを回答としてマークすることを忘れないでください。

于 2013-03-06T18:41:28.730 に答える
0

使用できます

LIMIT 10, 20

次の10行目と20行目から選択します

于 2013-03-04T18:35:57.367 に答える
0

サブクエリは多分?

SELECT * FROM cms_goods WHERE id IN (SELECT id FROM cms_goods WHERE rank < 20 LIMIT 10) OR id IN (SELECT id FROM cms_goods where rank > 20 LIMIT 10)
于 2013-03-04T18:35:58.023 に答える