Проблема с установкой 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 в поисках всех чекбоксов без опознавательных знаков, и он отлично работает.

Кто-то бы хоть какое-то представление?

Author: gmsantos, 2014-06-08

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 (например)

 2
Author: gmsantos, 2014-06-08 19:47:03