Возникли проблемы с реализацией небольшого количества кода, который работает в phpMyAdmin, но не работает в PHP. (Это мой первый проект PHP, и я не могу найти ответы, которые, кажется, работают)
В основном у меня есть 3 таблицы:
MemberDetails = mem_id, фамилия, имя …..
classdetails = class_id, имя класса …
classmember = class_id, mem_id
Я могу отобразить список классов, используя следующий код
<?php
$c_query = $conn->query("SELECT * FROM `classdetails` WHERE `class_id`= '$_REQUEST[class_id]'") or die(mysqli_error());
c_fetch = $c_query->fetch_array();
$class = $c_fetch['class_id'];
?>
.......
<?php
$query = $conn->query("SELECT * FROM `memberdetails` WHERE `mem_id` in (select mem_id from classmember where class_id= '$class')") or die(mysqli_error());
while($f_query = $query->fetch_array()){
?>
<tr>
<td><?php echo $f_query['firstname']?></td>
<td><?php echo $f_query['lastname']?></td>
</tr>
<?php
}
?>
Это все работает нормально, но позже мне нужно отобразить список всех других «членов», которые не входят в ранее выбранный класс.
В myPHPAdmin работает нормально
SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT mem_id FROM classmember WHERE class_id = 3) ORDER BY lastname, firstname ASC
но я теряю сюжет, пытаясь заставить это работать в PHP
<?php
$g_query = $conn->query('SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT * FROM memberdetails WHERE mem_id in (select mem_id from classmember where class_id= '$class') ORDER BY lastname, firstname ASC') or die(mysqli_error());
while($g_fetch = $g_query->fetch_array()){
echo "<option value = ".$g_fetch['mem_id'].">".$g_fetch['firstname'].' '.$g_fetch['lastname']." </option>";
}
?>
Однако я не могу заставить это работать на странице. Я пробовал различные способы форматирования запроса.
Полагаю, это довольно просто, но на данный момент, если бы у меня были волосы, я бы их выдернул!
Есть две ошибки, которые я могу найти в вашем запросе
Когда вы используете подзапрос и хотите сопоставить его со столбцом, вам нужно написать точное имя столбца, с которым вы хотите сравнить, иначе это приведет к ошибке.
Закройте скобки правильно.
Согласно комментарию, у вас есть еще одна проблема.
Попробуй ниже одного.
<?php
$g_query = $conn->query('SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT mem_id FROM memberdetails WHERE mem_id in (select mem_id from classmember where class_id= '.$class.')) ORDER BY lastname, firstname ASC') or die(mysqli_error());
while($g_fetch = $g_query->fetch_array()){
echo "<option value = ".$g_fetch['mem_id'].">".$g_fetch['firstname'].' '.$g_fetch['lastname']." </option>";
}
?>
У вас есть синтаксическая ошибка в вашем запросе.
$g_query = $conn->query('SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT * FROM memberdetails WHERE mem_id in (select mem_id from classmember where class_id= '$class') ORDER BY lastname, firstname ASC') or die(mysqli_error());
К этому
$g_query = $conn->query("SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT * FROM memberdetails WHERE mem_id in (select mem_id from classmember where class_id= $class) ORDER BY lastname, firstname ASC") or die(mysqli_error());
ИЛИ ЖЕ
$g_query = $conn->query('SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT * FROM memberdetails WHERE mem_id in (select mem_id from classmember where class_id= '.$class.') ORDER BY lastname, firstname ASC') or die(mysqli_error());
Также обратите внимание, что ваш проверенный запрос phpMyadmin и ниже одного отличается.
Я думаю, что вы ищете это:
$g_query = $conn->query('SELECT * FROM memberdetails WHERE mem_id NOT IN (SELECT mem_id FROM classmember WHERE class_id= '.$class.') ORDER BY lastname, firstname ASC') or die(mysqli_error());