Php 使用运算符从我的数据库中获取特定值

Php 使用运算符从我的数据库中获取特定值,php,mysql,Php,Mysql,我试图根据我的用户发布的帖子数量给他们一个排名。我制作了一个数据库,其中包含一行rankName,其中有“初学者、新手、itermediate,……要掌握”和一行最少的数字。我试图将帖子数量($qtyPosts)与最小行数进行比较 例如:当一个用户有9篇文章时,他会获得排名新手(至少有5篇文章)。 这是我为此编写的代码 PHP代码 // calculate number of posts from user $rowsPosts = $user->getQuantityOfPosts($u

我试图根据我的用户发布的帖子数量给他们一个排名。我制作了一个数据库,其中包含一行rankName,其中有“初学者、新手、itermediate,……要掌握”和一行最少的数字。我试图将帖子数量($qtyPosts)与最小行数进行比较

例如:当一个用户有9篇文章时,他会获得排名新手(至少有5篇文章)。 这是我为此编写的代码

PHP代码

// calculate number of posts from user
$rowsPosts = $user->getQuantityOfPosts($userID);
$qtyPosts = 0;
foreach ($rowsPosts as $q) {
    $qtyPosts++;
}

//status

$conn = db::getInstance();

$rank = "";

$statementRank = $conn->prepare("SELECT * FROM rank WHERE rank.minimum >=       $qtyPosts");
$statementRank->execute();

   while($row = $statementRank->fetch(PDO::FETCH_ASSOC) ){
   $rank = $row['rankName'];
   }  
HTML代码

   <h3>Status: <?php  echo $rank;  ?></h3>
状态:

然而,它没有发布正确的等级,而是发布了最新的一个“大师”。有人知道吗?

考虑一下你的
WHERE
条款:

WHERE rank.minimum >= $qtyPosts
如果用户处于最低级别,则所有级别都将
=
该用户的帖子计数

您可以保持相同的逻辑,但只需添加顺序和限制。大概是这样的:

WHERE rank.minimum >= $qtyPosts ORDER BY rank.minimum LIMIT 1

这会将等级从最低到最高排序,只选择第一个。

考虑您的
WHERE
子句:

WHERE rank.minimum >= $qtyPosts
如果用户处于最低级别,则所有级别都将
=
该用户的帖子计数

您可以保持相同的逻辑,但只需添加顺序和限制。大概是这样的:

WHERE rank.minimum >= $qtyPosts ORDER BY rank.minimum LIMIT 1

这将把等级从最低到最高排序,只选择第一个。

我想您应该在表中也有一个
maximum
列,并将查询更改为

SELECT * FROM rank WHERE rank.minimum >= $qtyPosts AND rank.maximum < $qtyPosts
从rank.minimum>=$qtyPosts和rank.maximum<$qtyPosts的列组中选择*

因为根据您当前的帖子,您将获得所有带有
$qtyPosts
>最小编号的排名。

我想您应该在表中也有一个
最大值
列,并将查询更改为

SELECT * FROM rank WHERE rank.minimum >= $qtyPosts AND rank.maximum < $qtyPosts
从rank.minimum>=$qtyPosts和rank.maximum<$qtyPosts的列组中选择*

因为根据您当前的帖子,您将获得所有排名的
$qtyPosts
>最小编号。

我不理解这里的逻辑,如果$qtyPosts为0,您的SQL不是会返回每个排名吗?查询中没有排序依据或限制…在
$rank=$row['rankName']中
$rank
每次都会被覆盖。只有最后一个值有效!我不明白这里的逻辑,0的$qtyPosts不是会用SQL返回每个排名吗?查询中没有排序依据或限制…在
$rank=$row['rankName']中
$rank
每次都会被覆盖。只有最后一个值有效!我还要提出一点,如果您只想设置一次变量,就不应该使用while循环。@AmeBerckmans,另外,您不需要使用
foreach
loop,simple
$qtyPosts=count($rowsPosts)可以。我尝试了你的“where”想法,但是它显示了错误的排名。“新手”至少有5个职位,“中级”至少有15个职位。例如,用户有9篇文章,但他显示的是“中级”排名。@ArneBerckmans:它显示了什么?它失败的具体原因是什么?当您在数据库上手动尝试相同的SQL查询时,结果是什么?@ArneBerckmans:这个
rank
表的实际数据和结构是什么?
$qtyPosts
的运行时值是多少?我还将提出一点,如果您只想设置一次变量,则不应该使用while循环。@AmeBerckmans,另外,您不需要使用
foreach
循环,简单的
$qtyPosts=count($rowsPosts)可以。我尝试了你的“where”想法,但是它显示了错误的排名。“新手”至少有5个职位,“中级”至少有15个职位。例如,用户有9篇文章,但他显示的是“中级”排名。@ArneBerckmans:它显示了什么?它失败的具体原因是什么?当您在数据库上手动尝试相同的SQL查询时,结果是什么?@ArneBerckmans:这个
rank
表的实际数据和结构是什么?那么,
$qtyPosts
的运行时值是多少?好的,谢谢<代码>$statementRank=$conn->prepare(“从rank中选择rankName,其中rank.minimum=$qtyPosts按rank.minimum LIMIT 1排序”)好,开始工作了,谢谢<代码>$statementRank=$conn->prepare(“从rank中选择rankName,其中rank.minimum=$qtyPosts按rank.minimum LIMIT 1排序”)