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 とタグ名を再利用できる変数にしたいと思います。 $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 火山 1awesome 2awesome
3awesome
4awesome 5awesome5





















何百万ものループの組み合わせを試してみましたが、欲しいものが得られません。

私の考えでは、 $tagname[] は配列であり、キーは括弧内の数字である必要があります。たとえば、tagname[2] はリストの 3 番目になります。したがって、if ($tag==$tagname[2]){ //echo "そのタグは 3 番目に人気があります"; しかし、$tagname は 1 つの行にすぎず、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 に答える