Я пытаюсь построить запрос MySQL вокруг некоторых необязательных параметров поиска в PHP. В моей базе данных есть три поля поиска, связанные с тремя столбцами. Пользователь должен иметь возможность искать каждый столбец отдельно или до всех 3, если они хотят сузить результаты.
Мой PHP-код построен так, что если одно из полей поиска пустое, это не имеет значения, и он продолжит поиск в двух других полях. Тем не менее, я изо всех сил пытаюсь понять, как построить мой SQL-запрос после того, как предложения where
которые уже указаны в массиве $whereclauses
. Я возвращаю те же столбцы в любом поиске, который пользователь делает, чтобы сделать запрос SQL довольно простым и означать, что он должен быть определен только один раз.
Мой PHP-код :
<?php require '../db/connect.php'; $whereclauses = array(); $subsets = false; // for every field if(!empty($_POST['name'])) { $subsets = true; $whereclauses[] = " ARTIST = ". mysql_real_escape_string(trim($_POST['name'])); } if($subsets) { $whereclauses = implode(", ". $whereclauses); } else { $whereclauses =""; }
SQL-запрос в PHP
if(!empty($whereclauses)) { $sql = "SELECT `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION` FROM `table 3`"; }; $result = mysql_query($sql); $data = array(); while ($array = mysql_fetch_assoc($result)) { $data[] = $array; } header('Content-type: application/json'); echo json_encode($data);
Как добавить массив $whereclauses
в свой $sql
запрос?
<?php require '../db/connect.php'; $whereclauses = array("where 1=1"); $subsets = false; // for every field if(!empty($_POST['name'])) { $subsets = true; $whereclauses[] = " ARTIST = '". mysql_real_escape_string(trim($_POST['name']))."'"; }
Просто взорвите массив в sql
$sql = "SELECT `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION` FROM `table 3` ".implode(" AND ",$whereclauses);
if(!empty($whereclauses)) { $sql = "SELECT `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION` FROM `table 3`"; $sql.= " WHERE 1=1 "; foreach($whereclauses as $where){ $sql.= " AND ".$where; } } $result = mysql_query($sql); $data = array(); while ($array = mysql_fetch_assoc($result)) { $data[] = $array; } header('Content-type: application/json'); echo json_encode($data);