У меня есть веб-приложение, которое отображает список событий, взятых из mysql db и представленный пользователю.
Пользователь может затем фильтровать результаты по нескольким (8-10) 'типам
Мой вопрос: как мне подойти к этому? В основном мне нужно сделать вход пользователя для фильтра (в $_GET
), а затем выяснить, какие типы он хочет фильтровать, и в соответствии с этим измените мой SQL-запрос.
Как мне это сделать не так сложно? Я думал о том, чтобы использовать множество операторов "if" или "case", но я не уверен, что это лучшее решение, поскольку его очень много кодирования для очень простой вещи.
Может ли кто-нибудь дать мне совет? Спасибо,
Пример DB:
EVENT_ID EVENT_NAME EVENT_TYPE
1 test regular
2 test2 vip
3 test4 testtype
...
Пример $_GET:
$_GET['regular'] = 'on'
...
вам следует создать массив типов, используя флажки
<input type="checkbox" name="types[]" value="regular" /> Regular
<input type="checkbox" name="types[]" value="vip" /> VIP
тогда у вас будет массив типов с $_REQUEST ['types']...
echo implode ( ",", $_ REQUEST ['types]);//например
Ну, это зависит от того, действительно ли вы храните event_types как строку (вы не должны).
Если вы измените их на int, вы можете просто сделать
$query = "select * from events";
if(isset($_REQUEST['types'])){
$query .= "and event_types in (".implode(",",$_REQUEST['types']).")";
}
Если вы храните их как строку в db, вы можете сделать то же самое, но вам придется иметь "вокруг значений...
, конечно, вам нужно будет обеспечить это
Предполагается, что он допускает многократное выделение или только выбор фильтра. Если 1, вы можете использовать функцию case легко или вы можете использовать функцию onchange javascript.
Принимает GET из нескольких флажков и создает SQL-запрос. Вам нужно изменить имена столбцов и массив $getOptions. Ключ элемента $getOptions - это имя типа.
$getOptions = array(
'regular' => $_GET['regular'],
'vip' => $_GET['vip'],
'testtype' => $_GET['testtype']
);
$sql = "SELECT * FROM events";
$sqlOptions = array();
foreach($getOptions as $key => $value)
{
if($value == 'on')
{
$sqlOptions[] = $key;
}
}
if(!empty($sqlOptions))
{
$sql .= " WHERE EVENT_TYPE IN ('" . implode("','", $sqlOptions) . "')";
}
// Execute $sql