私は何かに固執しているので、簡単な解決策があると確信していますが、それは私と私の基本的な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番です