Проблема с установкой SQL-запроса
у Меня есть таблица "дисциплины", таблицы "студенты" и "стол " alunosDisciplinas", где эти студенты могут быть зарегистрированы в одной или нескольких дисциплин. Эти дисциплины отображаются как флажки на экране поиска, чтобы использовать в качестве фильтра. Теперь нужно перечислить все значения из таблицы "студенты" в соответствии с дисциплинами выбраны, но я не получаю.
- это Запрос, который я делаю:
public function buscaAvancada ($Busca, $Condicao)
{
$oConexao = new conexaoclass();
$oConexao -> abrirConexao();
$sql = "SELECT * FROM Alunos
INNER JOIN Disciplinas
WHERE Alunos.Nome LIKE '%$Busca%'
AND Disciplinas.Nome = '$Condicao';";
$this -> resultado = mysql_query($sql, $oConexao -> getConn());
}
На экране поиск я делаем следующее испытание:
if (empty($_POST['chkDisciplina'])) {
$Busca = $_POST['txtbusca'];
$_POST['chkDisciplina'] = '1';
$oAluno = new alunosclass();
$oAluno -> listar($Busca);
}
else{
$Busca = $_POST['txtbusca'];
$arrayFiltro = $_POST['chkDisciplina'];
$separador = ' AND ';
$Condicao = implode( $separador, $arrayFiltro );
$oAluno = new alunosclass();
$oAluno -> buscaAvancada($Busca, $Condicao);
}
Там теперь проблема в верхней части фильтра, потому что, если я ввожу только один txt в поисках всех чекбоксов без опознавательных знаков, и он отлично работает.
Кто-то бы хоть какое-то представление?
1 answers
Вкладке условий не отделяет правильно string прошлой via POST, что приводит к query, без результатов.
, Например, выбрав две checkboxs (английский и короче) с студент 'juquinha'
SELECT * FROM Alunos
INNER JOIN Disciplinas
WHERE Alunos.Nome LIKE '%juquinha%'
AND Disciplinas.Nome = 'portugues AND matematica';
Измените разделитель $separador = "' AND '";
, и вы получите следующий результат:
SELECT * FROM Alunos
INNER JOIN Disciplinas
WHERE Alunos.Nome LIKE '%juquinha%'
AND Disciplinas.Nome = 'portugues' AND 'matematica';
ПРИМЕЧАНИЕ: После экспресс-тест, я считаю, что это нужно повторить Disciplinas.Nome
в каждом условии:
$separador = "' AND Disciplinas.Nome = '";
В Результате query:
SELECT * FROM Alunos
INNER JOIN Disciplinas
WHERE Alunos.Nome LIKE '%juquinha%'
AND Disciplinas.Nome = 'portugues' AND Disciplinas.Nome = 'matematica';
Хороший способ debugar своих запросов, делая echo
переменной a query создан и скопировав этот код в программе, которую вы используете для управления вашим банком (phpMyAdmin MySQL Workbench (например)