Приходит массив
$arr[
['filter-contacts']=>'true',
['clientName']=>'Вася',
['clientPhone']=>'36-76',
['clientEmail']=,
]
значения
clientName, clientPhone, clientEmail могут быть пустыми в любых комбинациях,
filter-contacts - просто кнопка, на нее внимания можно не обращать Нужно составить SQL запрос адекватно подставив AND, ну основная проблема в нем.
Все работает, просто код какой-то громоздкий, кто имеет опыт - гляньте, года 3 назад решал похожую задачу, вроде не столько колхоза было)
$sql = 'SELECT * FROM `contacts`';
if (isset($arr['filter-contacts']) && ($arr['clientName'] || $arr['clientPhone'] || $arr['clientEmail'])) {
$resultArr = [];
$sql .= ' WHERE';
if ($arr['clientName'] != '') {
$sql .= ' `name` LIKE ?';
$resultArr[] = '%' . $arr['clientName'] . '%';
}
if ($arr['clientPhone'] != '' && $arr['clientName'] != '') {
$sql .= ' AND `phone` LIKE ?';
$resultArr[] = '%' . $arr['clientPhone'] . '%';
} elseif ($arr['clientPhone'] != '' && $arr['clientName'] == '') {
$sql .= ' `phone` LIKE ?';
$resultArr[] = '%' . $arr['clientPhone'] . '%';
}
if ($arr['clientEmail'] != '' && ($arr['clientName'] != '' || $arr['clientPhone'] != '')) {
$sql .= ' AND `email` LIKE ?';
$resultArr[] = '%' . $arr['clientEmail'] . '%';
} elseif ($arr['clientEmail'] != '' && ($arr['clientName'] =='' || $arr['clientPhone'] == '')) {
$sql .= ' `email` LIKE ?';
$resultArr[] = '%' . $arr['clientEmail'] . '%';
}
}
Спасибо за адекватные ответы)