numbers/ranks 范围内的用户计数

User count between a rang of numbers/ranks

我想要 return x 数量的 members/users,排名为 1-10、11-24,另一个排名为 25-35。两个用户都继续出现在 NCO 类别中。即使一个用户排名 27 而另一个用户排名 13?我试过弄乱这些符号,将其更改为 < 或 > 或 == 但仍然 运行 没有用户出现,两个用户都出现了。

$stats['afenlisted'] = $pdo->query('SELECT count(*) from personnel WHERE rank >= "25" AND branch = "Air Force" ')->fetchColumn();

$stats['afnco'] = $pdo->query('SELECT count(*) from personnel WHERE rank >= "11" <= "24" AND branch = "Air Force" ')->fetchColumn();

感谢Aynber, AbraCadaver, and Honk der Hase。帮助我理解我的错误并让我解决它。因此,如果其他人 运行 遇到此问题,解决方法是:

$stats['afenlisted'] = $pdo->query('SELECT count(*) from personnel WHERE rank BETWEEN 25 AND 28 AND branch = "Air Force" ')->fetchColumn();

#For your own code something like this:

$stats['Whatever you want to call it'] = $pdo->query('SELECT count(*) FROM your table name WHERE column BETWEEN x AND y AND if you have another column your trying to get from ')->fetchColumn();

将 x 和 y 更改为您想要的任何数字,如果您没有其他列,您正在尝试获取更多内容,然后只需删除 y(您的数字值)之后的 AND

再次感谢那些帮助我理解错误并让我了解更多 SQL 知识的人。

首先,您的查询有误

$stats['afnco'] = $pdo->query('SELECT count(*) from personnel WHERE rank >= "11" <= "24" AND branch = "Air Force" ')->fetchColumn();

正如许多人所说,您有不同的方法来完成范围检查。我会展示其中的 3 个...

第一个:

SELECT .. FROM .. WHERE rank >= 11 AND rank <= 24

这将是最兼容的方式(对于 SQL 查询)进行检查,可能受到任何数据库的支持,因为它只使用基本的比较操作。

第二个:

SELECT .. FROM .. WHERE rank BETWEEN 11 and 24

虽然现在得到广泛支持,但 BETWEEN 是一个特殊的关键字,可能并非所有数据库系统都知道。

第三名:

SELECT .. FROM .. WHERE rank IN(11,12,13,14,15,16,17,18,19,20,21,22,22,23,24)

虽然这完全有效,但它更适合范围有间隙的情况。 (比如“11 到 24,但 17 除外”)