0

我非常坚持某件事,我确信有一个简单的解决方案,但它打败了我和我的基本 PHP!

我有一个 MySQL 数据库,其中包含用户为一组视频输入的标签(标签)。我查询数据库以找到 5 个最常出现的视频标签。

 $sql_get_toptags=mysql_query("SELECT TagName,Count(TagName) AS TagFreq 
                                 FROM Tags 
                                 Where vidID='$vidid' 
                                 Group BY TagName 
                                 Order By Count(TagName) DESC limit 5",$db);

如果我遍历结果,它们会输出到浏览器没问题

 while($myrow = mysql_fetch_assoc($sql_get_toptags)) {
   $tagname = $myrow[TagName];
   echo $tagname;
 } 

我想要做的是找出用户刚刚输入的标签是否在最常输入的列表中及其位置,即 1.tagname 我希望 1 和 tagname 是我可以重用的变量,在示例中$answer 下面是 1 $tagname 显然是标记名。

这就是我所拥有的:

 $sql_get_toptags=mysql_query("SELECT TagName,Count(TagName) AS TagFreq 
                                 FROM Tags 
                                 Where vidID='$vidid' 
                                 Group BY TagName 
                                 Order By Count(TagName) DESC limit 5",$db);

  while($myrow = mysql_fetch_assoc($sql_get_toptags)) {
      $tagname = $myrow[TagName];
      for ($i=1; $i<=5; $i++){
         echo $i,$tagname;
         echo "<br>";
         if ($tag==$tagname){
           $TopTag=$tagname;
           $answer=$i;
        }
     }
  }
  if (($TopTag!='') && ($answer!='')){
     echo "your tag is no.".$answer;
  }

这行不通。这是它输出的示例:

1胡须 2
胡须 3 胡须 4 胡须 5 胡须 1爆炸 2爆炸 3爆炸 4爆炸 5爆炸 1垃圾 2垃圾 3垃圾 4 垃圾 5垃圾 1 火山 2 火山 3 火山 4火山 5 火山 1 真棒 2 真棒
3 真棒
4 真棒 5 真棒 你 的标签是没有 。





















我已经尝试过感觉就像一百万个循环组合我无法得到我想要的东西。

在我看来,$tagname[] 应该是一个数组,括号中的数字是键,例如 tagname[2] 它将是列表中的第三个。所以 if ($tag==$tagname[2]){ //echo "那个标签是第三受欢迎的"; 但是 $tagname 只是一行,如果我尝试在 while 循环中创建一个数组,我只会在每次迭代时覆盖最后一个条目。

我真的很感激任何建议。

我想看到的输出(即如果 $tag=explosion)

1胡须 2爆炸 3垃圾 4火山 5厉害

你的标签是 2 号

4

2 回答 2

0

试试这个:

$sql_get_toptags=mysql_query("SELECT TagName,Count(TagName) AS TagFreq FROM GT_Tags Where VidID='$vidid' Group BY TagName Order By Count(TagName) DESC limit 5",$db);

while($myrow = mysql_fetch_assoc($sql_get_toptags)) {
    $tagnames[] = $myrow['TagName'];
}
foreach($tagnames as $key=>$name){
    echo ($key+1)." ".$name;
    $reversed[$name]=$key+1;
}

if(isset($reversed[$tag])) {
    echo "Your tag is no. ".$reversed[$tag];
} else {
    echo "Your tag is not in the top 5";    
}

您还可以使用 array_flip 交换键和数组值。

于 2013-03-06T12:57:54.527 回答
0
$sql_get_toptags=mysql_query("SELECT TagName,Count(TagName) AS TagFreq FROM GT_Tags Where VidID='$vidid' Group BY TagName Order By Count(TagName) DESC limit 5",$db);
$tagNames = array();

while($myrow = mysql_fetch_assoc($sql_get_toptags)) {
  $tagNames[] = $myrow['TagName'];
}

$tagNo = array_search($tag, $tagNames);
if($tagNo) {
  echo "Your tag is no. " . $tagNo;
} else {
      echo "Your tag is not in the top 5";    
}
于 2013-03-06T13:11:26.947 回答