Я пытаюсь получить результаты из базы данных MySQL, выполнив поиск нескольких терминов в нескольких полях. Скрипт ниже работает, но не совсем так, как мне это нужно, и мне трудно найти способ сделать это.Найти несколько строк в нескольких полях
В настоящее время, если я ищу «яблоки персиков» он будет возвращать каждый результат, который имеет «яблоки» ИЛИ «персики» на любом поле. То есть если в записи есть «Яблоки», но не «Персики» это даст результат.
С предполагаемым поведением я должен получить результат, только если в данной записи он найдет все условия поиска в любом поле. То есть «Яблоки» можно найти на поле f1 и «персики» на поле f2. Если найдено только «яблоки», то это не результат.
<?php
if (!isset($_REQUEST['term'])) exit;
$dblink = mysql_connect('localhost', 'root', 'pass') or die(mysql_error());
mysql_select_db('mytable');
mysql_set_charset('utf8', $dblink);
// query the database table for strings that match 'term'
$lcSearchVal = mysql_real_escape_string($_REQUEST['term']);
$lcSearchVal = explode(' ', $lcSearchVal);
$sql = 'SELECT id, f1, f2, f3, f4 FROM mytable
WHERE (';
$parts = array();
foreach($lcSearchVal as $lcSearchWord) {
if ($lcSearchWord <> "") {
$parts[] = '`id` LIKE "%' . $lcSearchWord . '%"';
}
if ($lcSearchWord <> "") {
$parts[] = '`f1` LIKE "%' . $lcSearchWord . '%"';
}
if ($lcSearchWord <> "") {
$parts[] = '`f2` LIKE "%' . $lcSearchWord . '%"';
}
if ($lcSearchWord <> "") {
$parts[] = '`f3` LIKE "%' . $lcSearchWord . '%"';
}
if ($lcSearchWord <> "") {
$parts[] = '`f4` LIKE "%' . $lcSearchWord . '%"';
}
}
$sql.= implode(' OR ', $parts) . ') order BY id desc limit 0,10';
$rs = mysql_query($sql, $dblink);
// loop through each string returned and format the response for jQuery
$data = array();
$data[] = array('value' => "", 'label' => " >> Last 10 results:", 'desc' => "");
if ($rs && mysql_num_rows($rs)) {
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) {
if (strlen($row['f3']) > 250) {
$row['f3'] = substr($row['f3'], 0, 250) . " [...]";
}
$data[] = array('value' => $row['id'], 'label' => $row['id'] . '/' . $row['f1'] . ' (' . $row['f2'] . ') ' . $row['f4'], 'desc' => $row['f3']);
}
}
// jQuery wants JSON data
echo json_encode($data);
flush();
?>
Спасибо за ваш вклад
[Пожалуйста, прекратите использование функций 'mysql_'] (http://www.deprecatedphp.com/mysql) – Kermit