0
"id"    "name"      "age"   "address"       "pincode"
"1"     "Peter"     "25"    "1 Elm Street"  "91550"
"2"     "James"     "30"    "2 Elm Street"  "91551"
"3"     "John"      "32"    "3 Elm Street"  "91552"
"4"     "Andrew"    "33"    "4 Elm Street"  "91553"

ここですべての行の数を選択して、 age <=30 の行のみを表示することはできますか?

年齢が 30 歳以下のユーザーのみを表示し、他のユーザーを表示するためのリンクを提供する必要があります。このリンクは、30 歳以上の他のユーザーがいる場合にのみ表示されます。

私は現在、2つの選択とphpを使用してこれを行っています。2つの選択を使用するのではなく、これを行うためのより良い方法を探しています。

望ましい出力

"id"    "name"      "age"   "address"       "pincode"
"1"     "Peter"     "25"    "1 Elm Street"  "91550"
"2"     "James"     "30"    "2 Elm Street"  "91551"
LINK GOES HERE -> View 2 other users //This is the diff from rows outputted and total rows
4

4 に答える 4

1

2 つのクエリを使用する必要があります。合計数を取得するための 1 つ:

SELECT COUNT(*) FROM people;

そして、30 歳未満のユーザーを選択する 1 つ。

SELECT * FROM people WHERE age < 30;

単一のクエリでこれを行う唯一の方法は、サブセレクトを使用することです。

SELECT (SELECT COUNT(*) FROM people) AS total_count,* FROM people WHERE age < 30;

ただし、これはまだ 2 つのステートメントを実行しているため、それほど効率的ではありません (論理的には、SELECT COUNT(*)...ステートメントは出力の行ごとに 1 回実行されるため、さらに多くのステートメントを実行していますが、クエリ オプティマイザーはそれを最適化する必要があります。 '本当に同一)、各行に余分なtotal_count列ができますが、これは望ましくありません。

于 2013-05-26T07:13:44.443 に答える
0

SQLで言及したすべてのプロセスを実行するということですか?

私はそれが可能だとは思わない。唯一の方法は、すべての行を選択し、ループ チェックで年齢 <= 30 の場合です。

于 2013-05-26T07:14:36.110 に答える
-1
SELECT COUNT(*) FROM `people` WHERE `age` <= 30
于 2013-05-26T07:12:47.363 に答える