php-左結合を使用して行数を取得する
2つのテーブルがあります。1つはコメントで、もう1つは好き嫌いです
コメント
+----+--------+
好き嫌い
{-code-2}
- コメントテーブルのuseridはセッションID(ログインしているユーザー)であり、 comnameはログに記録されてコメントが作成される投稿の一意のIDです。ユーザー内。
- likesordislikesテーブルのvtypeは投票タイプで、(0 =嫌い、1 =好き)、 uidは好きなユーザーIDにログインしていますまたはコメントが嫌いで、 comid がコメントテーブル(id)列からのものである
ここで、この特定のコメントの各コメントの下に、いいねまたは嫌いの総数を表示したいと思います。
私が試しているPHPコードはここにあります
{-code-3}
そうすれば、そのコメントの下に各コメントのいいね/嫌いが表示されない
より明確な方法で、私はこの結果が欲しいですコメント:
コメントを確認
{-code-4}コメントテスト
好き3-嫌い13番目のコメント
好き1-嫌い04番目
好き-嫌い5番目
好き-嫌い6日
好き-嫌い7つ
好き-嫌いただし、記事12の各コメントに
{-code-4}
が表示されています誰かがその中の何が悪いのかを確認できますか?
答え :
答え :
"; echo"いいね"。$tlikes。"
"; echo"嫌い"。$tdislikes; }|||好き4-嫌い2
答え :
解決策:
すべてのコメントについて、基本的にすべての好き嫌いを取得しています:
$query1 = "...";
$query2 = "...";
// ...
$tlikes = count($likes);
// ...
$tdislikes = count($dislikes);
そしてすべてのコメントのためにそれらを印刷する:
echo $fetch['usercom']."<br />";
echo "Likes ".$tlikes."<br />";
echo "Dislikes ".$tdislikes;
これが、すべてのコメントに対して同じ値を取得する理由です。現在のコードを修正するには、次のように $likes
と$dislikes
のマップを作成します。
$ stmt = $ DB-> prepare($ query1);
$ stmt-> execute();
$likes = array();
while($ like = $ stmt-> fetch(PDO :: FETCH_ASSOC){
$likes [$ like ['id']] = $ like ['count'];
}
次に、印刷を次のように変更します。
while($ fetch = mysqli_fetch_array($ res)){
echo $fetch['usercom']。"
";
echo "Likes"。(empty($likes [$ fetch ['id']])?0:$likes [$ fetch ['id']])。 "
" ;
//..。
}
注:コメントクエリをフィルタリングするのと同じ方法で、好き嫌いのクエリをフィルタリングする必要があります(したがって、使用しないものを要求しないようにします)
別の方法は、3つのクエリを1つのクエリに変更することです。これにより、コードが次のように変更されます。
$slt =
"SELECT" .
" c.usercom," .
" SUM(CASE WHEN lod.vtype=1 THEN 1 ELSE 0 END) likes," .
" SUM(CASE WHEN lod.vtype=0 THEN 1 ELSE 0 END) dislikes" .
" FROM" .
" comments c LEFT JOIN likesordislikes lod ON lod.comid=c.id" .
" WHERE" .
" c.comname = '$c_name' AND c.post = '$type'" .
" GROUP BY" .
" c.id"
;
$res = mysqli_query($con, $slt);
while($fetch = mysqli_fetch_array($res)) {
echo $fetch['usercom']."<br />";
echo "Likes ".$fetch['likes']."<br />";
echo "Dislikes ".$fetch['dislikes'];
}
ここにクエリがあります動作を確認したい場合に備えて
更新
2つのゼロを表示したくない場合は、 while
を次のように変更できます。
while($ fetch = mysqli_fetch_array($ res)){
echo $fetch['usercom']。"
";
if($ fetch ['likes'] === '0' && $ fetch ['dislikes'] === '0'){
$ fetch ['likes'] ='';
$ fetch ['dislikes'] ='';
}
echo"いいね"。$fetch['likes']。"
";
echo"嫌い"。$fetch['嫌い'];
}
答え :
解決策:
クエリはcomname列を調べます。つまり、記事12を合計すると、列ごとに分離するのではなく、すべてが得られます。 IDを確認する必要があります-
のようなもの $slt = "SELECT * FROM `comments` where `id` = '$id' and `post` = '$type'";
ここで、 $id
はコメントテーブルのIDです。
表示したコードでこれを取得する方法はわかりませんが、試してみてください。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。