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

您必须使用两个查询。一个得到总数:

SELECT COUNT(*) FROM people;

还有一个选择30岁以下的用户。

SELECT * FROM people WHERE age < 30;

使用单个查询执行此操作的唯一方法是使用子选择:

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

但这同样有效,因为您仍在执行两条语句(从逻辑上讲,您正在执行更多语句,因为该SELECT COUNT(*)...语句将为每一行输出执行一次,但您的查询优化器应该优化它,因为它们'完全一样),然后你会total_count在每一行中都有一个额外的列,这是你不想要的。

于 2013-05-26T07:13:44.443 回答
0

你的意思是,做你在sql中提到的所有过程?

我不认为这是可能的。唯一的方法是选择所有行并循环检查age <= 30。

于 2013-05-26T07:14:36.110 回答
0

这是查询:

SELECT p.*, (SELECT COUNT(id) FROM people WHERE age > 30) as link_count 
FROM people p  WHERE p.age <= 30
于 2013-05-26T08:12:00.887 回答
-1
SELECT COUNT(*) FROM `people` WHERE `age` <= 30
于 2013-05-26T07:12:47.363 回答