1

サイトに投票システムがあり、ユーザーが賛成票、反対票を投じたかどうかを確認したい。いいえを減らすために。選択したクエリの数 投票テーブルのユーザー ID と等しい ID を含む完全なテーブル 投票テーブルのテーブル スキーマは投票表 テーブル 回答テーブルのスキーマは回答表

$query=SELECT answer_id,user_id,vote FROM vote WHERE user_id='{$_SESSION["id"]}'
$result1=mysql_query($query);
$array=mysql_fetch_array($result1);

質問の回答を取得するときに、このユーザーが投票したかどうかを確認したいのですが、この配列で answer_id が見つかった場合は、投票の値を見つけたいですか?

コードは

$query1="SELECT * FROM answers WHERE question_id='{$question_id}'";//$question_id is id of question
$result=mysql_query($query1);
if($result){
    While ($row=mysql_fetch_arrar($result)){
        if(in_array($row["id"],$array){
            echo $array["vote"];
        }
    }
}

2 つの配列を一緒にフェッチする方法がわかりません...?$array で while ループを使用していないため、このクエリは最初の値に対してのみ機能します。

4

1 に答える 1

1

これは、ユーザーが回答に投票したかどうかを判断する 1 つのクエリで実行できます。ユーザー投票を取得するための事前クエリや、フェッチ ループ内での配列比較は必要ありません。

LEFT JOINサブクエリに対して aを使用しvotes、そのWHERE句にユーザー ID を指定します。の値uservotes.voteが NULL の場合、ユーザーはこの回答に投票していません。それ以外の場合uservotes.voteは、ユーザーの投票が含まれます。

SELECT
  answers.*,
  uservotes.vote
FROM 
  answers 
  LEFT JOIN (
    SELECT answer_id, vote FROM votes WHERE user_id = '{$_SESSION["id"]}'
  ) uservotes ON answers.id = uservotes.answer_id
WHERE answers.question_id = {$question_id}
于 2012-07-11T14:04:41.547 に答える