对,我有两个查询扫描MYSQL数据库中的关键字,并返回它们是否为a)在一起或b)分开。我现在添加了一个名为“rank”的新列,它按顺序对它们进行排序。我为每个查询添加了“ORDER BY rank”,当我输入单个术语时,结果显示正确,但是当输入两个或更多个术语时,我收到此错误:MySQL查询错误:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“ORDER BY rank”附近使用正确的语法。 结果按ID自动排名。当我从一个查询中删除ORDER BY标记时,另一个查询的标记将不起作用。我不明白吗?我的疑问如下。
// Terms Together
$query = " SELECT * FROM scan WHERE ";
$terms = array_map('mysql_real_escape_string', $terms);
$i = 0;
foreach ($terms as $each) {
if ($i++ !== 0){
$query .= " AND ";
}
$query .= "keywords LIKE '%{$each}%' ORDER BY rank";
}
/* Query Statement Building - Terms Separate */
$query = " SELECT * FROM scan WHERE ";
$terms = array_map('mysql_real_escape_string', $terms);
$i = 0;
foreach ($terms as $each) {
if ($i++ !== 0){
$query .= " OR ";
}
$query .= "keywords LIKE '%{$each}%' ORDER BY rank";
}
答案 0 :(得分:7)
ORDER BY
必须在循环结束时出现,而不是循环内部。否则,每个查询会收到多个ORDER BY
语句,这些语句无效:
foreach ($terms as $each) {
if ($i++ !== 0){
$query .= " OR ";
}
$query .= "keywords LIKE '%{$each}%'";
}
// Don't append the ORDER BY until after the loop
$query .= " ORDER BY rank";
更改两个循环以使用此模式而不是您当前拥有的模式。