Я хочу создать форму поиска для своего сайта и иметь возможность поиска, выбрав несколько параметров, используя LIKE и, в конечном итоге, ORDER BY. Поиск по имени, стране и дате.
InnoDB, сопоставление utf8mb4_unicode_ci, php 5.6
<?php
if(isset($_POST['search'])){
$sql = 'SELECT * FROM radio_posts';
$where = array();
$params = array();
if (!empty($_POST['postRadioName'])) {
$where[] = "postName LIKE :searchRadioName";
$params[':searchRadioName'] = '%'.$_POST['postRadioName'].'%';
}
if (!empty($_POST['postCountryID'])) {
$where[] = "postCountryID = :postCountryID";
$params[':postCountryID'] = $_POST['postCountryID'];
}
if (!empty($where)) {
$sql .= ' WHERE (' . implode(') AND (', $where) . ') ' ;
}
$stmt = $db->prepare($sql);
foreach($params as $param => $value) {
$stmt->bindParam($param, $value);
}
$stmt->execute();
}
?>
Моя таблица - radio_posts, есть также несколько столбцов, postID, postName, postCountryID, postDate. В postName у меня есть несколько строк: новое радио , новое радио 2 , новое радио 3 . Когда я ищу термин, например «новый», отображаются все три строки, хорошо. Если я выполняю поиск по postCountryID, например, «3», отображается только одна строка, что также хорошо, поскольку для идентификатора 3 назначена только одна. Но при поиске по обоим, postName «new» и postCountryID «3», результаты не отображаются. Как это решить? чтобы отобразить строки / s, соответствующие как postName, так и postCountryID. В phpMyAdmin работает, но с помощью формы поиска это не работает:
SELECT * FROM `radio_posts` WHERE postName LIKE '%new%' AND postCountryID = 3
Также, если возможно, я хотел бы спросить, каков наилучший подход к упорядочению результатов по столбцу postDate, по возрастанию, по убыванию.