我从这里使用ajax livesearch:Ajax Livesearch
我想让用户搜索数据库中的城市,到目前为止它还能很好地运行。 当我输入一封信时,它会显示城市和邮政编码。 现在我尝试使用cypher使相同的搜索框也可以工作,这样如果用户通过zipcodes搜索,将显示城市。 但我完全陷入困境。也许有些人对搜索框有一些经验,可以帮助我。
在config.php
我定义了搜索列:
const USER_TABLE = 'cities';
const SEARCH_COLUMN = 'Name';
要从数据库中获取结果,我有:
$db = DB::getConnection();
// get the number of total result
$stmt = $db->prepare('SELECT COUNT(id) FROM ' . Config::USER_TABLE . ' WHERE ' . Config::SEARCH_COLUMN . ' LIKE :query');
$search_query = $query.'%';
$stmt->bindParam(':query', $search_query, PDO::PARAM_STR);
$stmt->execute();
$number_of_result = $stmt->fetch(PDO::FETCH_COLUMN);
// initialize variables
$HTML = '';
$number_of_pages = 1;
if ( (int) $number_of_result !== 0)
{
if ($items_per_page === 0)
{
// show all
$stmt = $db->prepare('SELECT * FROM ' . Config::USER_TABLE . ' WHERE ' . Config::SEARCH_COLUMN . ' LIKE :query ORDER BY ' .Config::SEARCH_COLUMN);
$search_query = $query.'%';
$stmt->bindParam(':query', $search_query, PDO::PARAM_STR);
}
else
{
/*
* pagination
*
* calculate total pages
*/
if ($number_of_result < $items_per_page)
$number_of_pages = 1;
elseif ($number_of_result > $items_per_page)
$number_of_pages = floor($number_of_result / $items_per_page) + 1;
else
$number_of_pages = $number_of_result / $items_per_page;
/*
* pagination
*
* calculate start
*/
$start = ($current_page > 0 ) ? ($current_page - 1) * $items_per_page : 0;
$stmt = $db->prepare('SELECT * FROM ' . Config::USER_TABLE . ' WHERE ' . Config::SEARCH_COLUMN . ' LIKE :query ORDER BY '.Config::SEARCH_COLUMN.' LIMIT ' . $start . ', ' . $items_per_page);
$search_query = $query.'%';
$stmt->bindParam(':query', $search_query, PDO::PARAM_STR);
}
// run the query and get the result
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
这将在我的网站上显示结果:
foreach($results as $result)
{
$HTML .= "<tr><td>{$result['Name']}</td><td>{$result['Postal_Code']}</td></tr>";
}
因此,如果我输入字母,它也会从列中找到正确的邮政编码&#39; Postal_Code&#39;。
但我想也可以这样做,我键入数字,它显示我的城市和拉链?
在config.php
我只能有一列定义
const SEARCH_COLUMN = 'Name';
也许可以使用第二个const:
const SEARCH_COLUMN2 = 'Postal_Code';
? 但是我如何在db查询中使用它呢? 我解释我的问题有点困难,所以我希望你能理解我:) 感谢
答案 0 :(得分:0)
如果您在配置中添加另一个常量,则只需在查询中添加OR
子句:
' WHERE ' . Config::SEARCH_COLUMN . ' LIKE :query OR '. Config::SEARCH_COLUMN2 . ' LIKE :query'