"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"
是否可以在此处选择所有行的计数,但只显示年龄<= 30的那些?
我只需要显示年龄<= 30的用户,并提供查看其他用户的链接。仅当有其他用户时才会显示该链接&gt; 30。
我现在使用2个选择和php来做这个。我正在寻找一种更好的方法,而不是使用2种选择。
Desidred Output
"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
答案 0 :(得分: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
列,这是你不想要的。
答案 1 :(得分:0)
你的意思是,执行你在sql中提到的所有过程?
我认为不可能。唯一的方法是选择所有行并在循环中检查年龄是否<= 30。
答案 2 :(得分:0)
以下是查询:
SELECT p.*, (SELECT COUNT(id) FROM people WHERE age > 30) as link_count
FROM people p WHERE p.age <= 30
答案 3 :(得分:-1)
SELECT COUNT(*) FROM `people` WHERE `age` <= 30