同様の質問をしましたが、クエリを取得して必要な結果を得ることができませんでした。質問は出力されましたが、正しいものではありませんでした。ここで質問をもう少し明確にし、表を少し修正します。私は、人が「話をしましょう」と入力すると、プログラムがユーザーにテーブルからいくつかの質問をするプログラムを持っています(例: 20 qns)
私は3つのテーブルを持っています。
(peopleiknow) (questions) (questionsasked)
NID FName QID Question QID PID Answer
1 Mark 1 Are you human 1 1 'Definately yes.'
2 Sue 2 Do you like soup? 1 2 'Most of the time.'
2 2 'Yes especially tomato.'
(※出題表は最初は空欄でも構いません)
基本的に、プログラムは、questionsasked テーブルにないユーザー '$name' の最初の質問を取得します。次に、質問をし、その回答を questionasked テーブルに追加します。(最初は正しい質問を得ようとしています)
PHP とのインターフェイスに移動するための javascript/jQuery のスニペットは次のとおりです。
var uname='Lindsay'; //will be assigned dynamically after I get this fixed.
$.post('ajax/getQuestions.php', { name: uname },function(data2) {
var qn = data2.value1; //question
var pid = data2.value2; // PID
var qid = data2.value3; //QID
alert(qn);
alert(pid);
alert(qid);
var answer1 = prompt(qn, 'Please answer here');
$.post('ajax/addQuestionAsked.php', {answer: answer1, PID: pid, QID: qid},
function(data3) {alert('added question');} );
//$('div#PlaceOfResponse').html(data3);}
});
PHP ファイルの重要な部分は次のとおりです。
※コネクション部分省略 ※ $linkはコネクション
if (isset($_POST['name']) && !empty($_POST['name']))
{
$name = trim($_POST['name']); //could do better protection..
$query1 = "SELECT * //(q.Question, q.QID, p.person)?
FROM questions q
INNER JOIN questionsasked qa
ON q.QID = qa.QID
INNER JOIN peopleiknow p
ON qa.PID = p.NID
WHERE qa.Asked='N' OR qa.Asked IS NULL
AND p.Person = '$name'";
上記のクエリはうまく機能せず、以下のコメントで試してみましたが、うまくいきませんでした..
/*
$query1 = "SELECT FIRST(Question)
FROM questions q
WHERE NOT EXISTS
(SELECT *
FROM questionsasked qa
RIGHT JOIN peopleiknow p
ON p.NID = qa.PID
INNER JOIN questions q
ON qa.QID = q.QID
WHERE q.QID = qa.QID
AND p.FName = '$name')";
*/
if ($result = mysqli_query($link, $query1))
{
if (0 == mysqli_num_rows($result))
{
echo('all asked');
}
else
{
/* fetch associative array */
$row = mysqli_fetch_assoc($result);
{header('Content-Type: application/json');
$question = $row['Question'];
$PID = $row['PID'];
$QID = $row['QID'];
$response = array('value1' => $question, 'value2' => $QID, 'value3' => $PID);
echo json_encode($response);
}
}
}
}
else {
?><script>alert('$name');</script>
<?php
echo 'variable \'name\' not set properly';}
/* close connection */
mysqli_close($link);
?>
ほとんど機能していましたが、質問されたテーブルに回答を追加し、更新して「話しましょう」と言ったときに、戻って同じ質問をしました。次に、コードを少し変更したところ、js ファイルのアラートは、送り返された 3 つの変数すべてに対して (未定義) アラートを出すようになりました.. (テーブルを少し変更する前は機能していました)。なぜそれをしているのか、今ではわかりません。
これはクエリでの私の最新の試みです:
$query1 = "SELECT FIRST(q.question,p.NID,q.QID)
FROM questions q
LEFT JOIN questionsasked qa
ON q.QID = qa.QID
LEFT JOIN peopleiknow p
ON qa.PID = p.NID
WHERE qa.QID
NOT IN (SELECT * FROM questionsasked WHERE q.QID = qa.QID)
AND p.FName = '$name'";