Как построить MySQL запрос с PHP на лету - PullRequest
0 голосов
/ 19 ноября 2018

Моя голова курит ;-) и со всей информацией, которую я прочитал здесь, я не получил разрешение.

У меня есть такая форма: форма

Мне нужно создать Mysql Query select на лету. Флажки могут быть разными. Только один или два или три или четыре или ..., это до пользователя. Из выбранных флажков мне нужно построить запрос Mysql. я действительно ценю это, кто-то может мне помочь.

Это моя функция. до сих пор ... мне нужно добавить AND для запроса SQL. Я много пробовал, но ничего не работает.

    function wdw_get_data_answer_select($mysqli, $array_selected) {
$sql_1 = '';
foreach ($array_selected as $key => $value) {
    if ($key == 'gender' && !empty($value)) { $sql_1 .= "gender = '".$value."'"; }
    if ($key == 'age' && !empty($value)) { $sql_1 .= "age = '".$value."'"; }
    if ($key == 'education' && !empty($value)) { $sql_1 .= "education = '".$value."'"; }
    if ($key == 'department' && !empty($value)) { $sql_1 .= "department = '".$value."'"; }
}
$sql = "SELECT `gender`,`age`,`education`,`department`,`code_numbers` FROM ".TABLE_ANSWERS_BASIC_SELECT." WHERE ".$sql_1;
if ($stmt = $mysqli->prepare($sql)) {
    $stmt->execute();
$stmt->store_result();
//printf("Errormessage: %s\n", $mysqli->error);
if ($stmt->num_rows > 0 ) {
        $stmt->bind_result($gender, $age, $education, $department, $code_numbers);
        while ($stmt->fetch()) {
            $select_content .= $code_numbers.',';
        }
    }
}
$stmt->close();
$select_content = substr($select_content, 0, -1);
return $select_content; }

Вот таблица SQL

Пример: если флажок установлен как TEXT_FEMALE и TEXT_AGE_2 и TEXT_AGE_3 TEXT_EDUCATION_2

SELECT * FROM `TABLE` WHERE `gender` = TEXT_FEMALE and `age` = TEXT_AGE_2 or `age` = TEXT_AGE_3 and `education` = TEXT_EDUCATION_2;

и скажем, у TEXT_AGE_3 нет TEXT_FEMALE, как я могу отфильтровать TEXT_MALE? я попробовал

SELECT * FROM `TABLE` WHERE `gender` IN('TEXT_FEMALE') and `gender` = TEXT_FEMALE and `age` = TEXT_AGE_2 or `age` = TEXT_AGE_3 and `education` = TEXT_EDUCATION_2;

работает, но но если флажок установлен как TEXT_FEMALE и TEXT_AGE_2 и TEXT_AGE_3 TEXT_EDUCATION_2 И TEXT_DEPARTMENT_1 И TEXT_DEPARTMENT_2 я попробовал

SELECT * FROM `TABLE` WHERE `gender` IN('TEXT_FEMALE') and `gender` = TEXT_FEMALE and `age` = TEXT_AGE_2 or `age` = TEXT_AGE_3 and `education` = TEXT_EDUCATION_2 and `department` = TEXT_DEPARTMENT_1 or `department` = TEXT_DEPARTMENT_2

выбранный ответ не является основным.

  • TEXT_FEMALE Ženska
  • TEXT_MALE Мошки
  • TEXT_AGE_1 Pod 30 лет
  • TEXT_AGE_2 до 30 до 50 лет
  • TEXT_AGE_3 Nad 50 let
  • TEXT_EDUCATION_1 Poklicno usposabljanje
  • TEXT_EDUCATION_2 Штудия
  • TEXT_EDUCATION_3 Нити
  • TEXT_DEPARTMENT_1 Производня
  • TEXT_DEPARTMENT_2 Uprava
  • TEXT_DEPARTMENT_3 Другой (Vzdrževanje, Logistika, Kakovost)

Надеюсь, я объяснил это понятно. Я немецкий парень. Я надеюсь, что мой английский в порядке; -)

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Теперь это работает.Я изменил форму.Вместо флажков я использую радио кнопки.Я создаю свой собственный запрос на лету.Спасибо всем за помощь!

0 голосов
/ 19 ноября 2018

с этой библиотекой github.com/nilportugues/php-sql-query-builder вы бы сделали что-то вроде этого

$builder = new MySqlBuilder(); 
$query = $builder->select()
    ->setTable('user')
    ->where();

foreach ($array_selected as $key => $value) {
    $query->in($key,array($value));
}

echo $builder->writeformatted($query); // this will output the sql you need to run
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...