Javascript 使用Twitter/typeahead.js在SELECT查询中合并类似SQL
我有以下代码:Javascript 使用Twitter/typeahead.js在SELECT查询中合并类似SQL,javascript,php,mysql,Javascript,Php,Mysql,我有以下代码: $places = query("SELECT * FROM places WHERE postal_code = ? or place_name = ? or admin_code1 = ? or admin_name2 = ? or admin_name1 = ?", $_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]); 正如我开始键入(比如纽约)时所预料的那样,在找到与纽约完全匹配的位置之前,
$places = query("SELECT * FROM places WHERE postal_code = ? or place_name = ? or admin_code1 = ? or admin_name2 = ? or admin_name1 = ?",
$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);
正如我开始键入(比如纽约)时所预料的那样,在找到与纽约完全匹配的位置之前,下拉框会显示“未找到任何位置”,然后下拉框会显示与纽约完全匹配的多个位置。当我开始键入邮政编码时也是如此
我将代码修改为使用LIKE作为邮政编码,如下所示:
$places = query("SELECT * FROM places WHERE places.postal_code LIKE ? or place_name = ? or admin_code1 = ? or admin_name2 = ? or admin_name1 = ?",
$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);
然而,这种修改没有效果。我希望查询返回的位置是基于在zip的开头键入,而不是完整的zip。由于我是SQL新手,我不确定语法,也不确定需要在代码的类似部分中加入哪些修饰符来实现此功能 你可以这样试试
$places = query("SELECT * FROM places WHERE postal_code = ?s or place_name = ?s or admin_code1 = ?s or admin_name2 = ?s or admin_name1 = ?s",
$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);
或
使用LIKE时,需要使用通配符。在这种情况下,假设输入的结尾是正确的,并且只缺少所需的结尾:
LIKE '?%'
因此,在您的代码中:
$places = query("SELECT * FROM places WHERE places.postal_code LIKE '?%' or place_name = '?%' or admin_code1 = '?%' or admin_name2 = '?%' or admin_name1 = '?%'",
$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"],$_GET["geo"]);
我用了这个,它成功了:
$places = query("SELECT * FROM places WHERE postal_code LIKE ? or place_name LIKE ? or admin_code1 LIKE ? or admin_name2 LIKE ? or admin_name1 LIKE ?",
$_GET["geo"] . '%' ,$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%');
不幸的是,这两种方法都不起作用,而且它们完全阻止了任何建议出现在下拉框中,即使是完全匹配的建议。查询返回以下错误:致命错误:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“?s”或place_name=”的正确语法?或管理员代码1=?或管理员名称2=?或者admin_name1=?'使用SQL通配符“%”怎么样?
$places = query("SELECT * FROM places WHERE postal_code LIKE ? or place_name LIKE ? or admin_code1 LIKE ? or admin_name2 LIKE ? or admin_name1 LIKE ?",
$_GET["geo"] . '%' ,$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%',$_GET["geo"] . '%');