PHP MySQL ВЫБЕРИТЕ, ГДЕ НЕ ВХОДИТ

Возникли проблемы с реализацией небольшого количества кода, который работает в 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>";
}
?>

Однако я не могу заставить это работать на странице. Я пробовал различные способы форматирования запроса.

Полагаю, это довольно просто, но на данный момент, если бы у меня были волосы, я бы их выдернул!

0

Решение

Есть две ошибки, которые я могу найти в вашем запросе

  1. используйте имя столбца вместо *

Когда вы используете подзапрос и хотите сопоставить его со столбцом, вам нужно написать точное имя столбца, с которым вы хотите сравнить, иначе это приведет к ошибке.

  1. вы не правильно завершили скобки.

Закройте скобки правильно.

Согласно комментарию, у вас есть еще одна проблема.

  1. изменить $ class на. $ class

Попробуй ниже одного.

<?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>";
}
?>
-1

Другие решения

У вас есть синтаксическая ошибка в вашем запросе.

$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());
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector