Intereting Posts

SQL-запрос в файле PHP нуждается в исправлении

Я задал аналогичный вопрос, однако не мог получить запрос, чтобы дать мне результаты, которые я хотел, это вопрос, но не правильный. Я уточню вопрос немного лучше и немного изменил таблицы. У меня есть программа, в которой, если человек типа «позволяет говорить», программа запрашивает у пользователей ряд вопросов из таблицы (например, 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.' 

(* таблица с запросами может быть пустой)

В основном программа получает первый вопрос для пользователя '$ ​​name', который не находится в таблице вопросов. Затем задает вопрос и добавляет ответ на заданную таблицу. (Сначала я пытаюсь получить правильный вопрос)

Фрагмент javascript / jQuery для перехода к интерфейсу с php выглядит следующим образом:

  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 теперь предупреждают (неопределенные) для всех трех переменных, которые были отправлены обратно. (Работал до того, как немного изменил таблицы). теперь не может понять, почему это так.

Это моя последняя попытка запроса:

  $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'"; 

Возможно, вам стоит подумать о том, как читать левое соединение

попробуйте что-то вроде этого:

 "SELECT * FROM questions q LEFT JOIN questionsasked qa ON q.QID = qa.QID and qa.PID = (select NID from peopleiknow where FName = '$name') WHERE qa.PID IS NULL " 

на этот раз я проверил его с SQLite DB 🙂 проницательная версия не работала из-за missin PID в Left Join!

Приветствую,

Мартин