$results = mysql_query('SELECT DISTINCT artist FROM mm_albums WHERE artist LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" ORDER BY artist ASC LIMIT 0,10', $dbcon);
$data = array();
if ( $results && mysql_num_rows($results) )
{
while( $row = mysql_fetch_array($results, MYSQL_ASSOC) )
{
$data[] = array(
'label' => $row['artist'],
'value' => $row['artist']
);
}
}
echo json_encode($data);
flush();
这个功能可以正常运行,但我希望能够跨多列搜索各种结果,例如:
来自艺术家列的艺术家名称
来自名称列的曲目名称
来自标签列的唱片公司名称
我刚刚花了两个小时阅读大量不同的方法,但没有一个完全适合我想要做的事情,而且我在格式化查询时遇到了麻烦。
有人有什么建议吗?
--以下是编辑后添加的解决方案--
这是我如何通过 Ed 的建议让它正常工作的,以防其他人也在尝试这样做。
这将从 2 个不同的表中搜索 4 个不同的列,并将用户键入的搜索词与其中任何列中找到的任何内容匹配,同时剥离重复的结果。 这在JQuery Autocomplete中无缝运行,以下是设置方法。
1)创建以下 php 文件并将其命名为search.php
<?php
if ( !isset($_REQUEST['term']) )
exit;
$connect = mysql_connect('dbhost', 'dbusername', 'dbpassword') or die( mysql_error() );
mysql_select_db('dbname');
$results = mysql_query('SELECT artist AS shout FROM albums WHERE artist LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" UNION SELECT name FROM albums WHERE name LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" UNION SELECT label FROM albums WHERE label LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" UNION SELECT track_name FROM tracks WHERE track_name LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" ORDER BY 1 LIMIT 10', $connect);
$data = array();
if ( $results && mysql_num_rows($results) )
{
while( $row = mysql_fetch_array($results, MYSQL_ASSOC) )
{
$data[] = array(
'label' => $row['shout'],
'value' => $row['shout']
);
}
}
echo json_encode($data);
flush();
?>
2) 在您的新脚本中,用实际用于连接到数据库的详细信息替换 dbhost
、dbusername
、dbpassword
和 dbname
。 尽管我建议您不要将这些信息存储在此文件中。更好的方法是将连接信息存储在单独的文件中,在 web 根目录之外查找它,并在此处使用 `include' 引用它
3) 用您自己的查询替换它们。这是我的设置方式,因此您可以看到需要替换的内容...
首先,将搜索字符串重命名为 shout
(仅为了清晰),然后在表 albums
中搜索列 artist
,并将 artist
与 Autocomplete 生成的搜索 term
进行匹配。
此格式重复搜索以下内容...
albums
中的 name
albums
中的 label
tracks
中的 track_name
只需将此信息替换为您希望搜索的列和表,保存该文件并上传它。
4) 将以下搜索表单添加到页面中,其中 pathtoyoursearchenginescript.php
指向您的搜索引擎。
<form action="pathtoyoursearchenginescript.php" method="post">
Search: <input type="text" id="suggest" /> <input type="submit" value="Search" />
</form>
假设您在页面上已经加载了所需的.js库,那么您只需要将这一小段代码添加在任何位置即可完成!
<script type="text/javascript">
jQuery(document).ready(function($){
$('#suggest').autocomplete({source:'search.php', minLength:2});
});</script>
注意:以上代码假设
search.php
位于您的Web根目录中,如果不是,请确保使用正确的文件位置进行更新。希望这对某些人有用;)
mysql_*
函数。你应该考虑使用 mysqli 或 PDO,这是有很好的理由的。更多详情请参见此处:https://dev59.com/3Gcs5IYBdhLWcg3wcDaZ - jcsanyimysqli_
函数可以以几乎与mysql_
函数完全相同的方式使用。只是当您以这种方式使用它时,它不提供与绑定参数相同的保护级别 - 但至少它不是一个不受支持的库。 - jcsanyi