所以我有一个表,其中有多个列,一个是保存用户位置的字符串,例如:'Toronto,Ontario,Canada'以及id,用户名,电子邮件和其他信息。
返回一行并显示在表格中,我可以为任何一列输入搜索字符串。如果没有为给定列输入字符串,则它不会在该列上进行过滤。
使用括号的建议没有帮助,因为当仅搜索位置时,甚至没有添加OR语句。那么为什么我会得到随机错误的结果。刚刚搜索了英格兰队,让达拉斯德克萨斯队回归,其他许多人根本没有任何意义。
$sql="SELECT
u.id, u.firstname, u.lastname, u.email, u.created,
up.user_name, up.location_label
FROM users u
JOIN profile up ON up.user_id=u.id
WHERE ";
$sql.=!empty($post['id'])?"u.id={$post['id']} AND ":"";
$sql.=!empty($post['name'])?"u.firstname LIKE '%{$post['name']}%' OR ":"";
$sql.=!empty($post['name'])?"u.lastname LIKE '%{$post['name']}%' AND ":"";
$sql.=!empty($post['email'])?"u.email LIKE '%{$post['email']}%' AND ":"";
$sql.=!empty($post['created'])?"u.created LIKE '%{$post['created']}%' AND ":"";
$sql.=!empty($post['userName'])?"up.user_name LIKE '%{$post['userName']}%' AND ":"";
$sql.=!empty($post['location'])?"up.location_label LIKE '%{$post['location']}%' AND ":"";
$sql=rtrim($sql,"WHERE ");
$sql=rtrim($sql,"AND ");
$sql.=" ORDER BY u.id DESC ";
$sql.=" LIMIT {$post['lastIndex']}, {$post['loadNum']} ";
我发现的是,如果我搜索特定的位置字符串,例如:'Ontario'我获得了很多“安大略省”的结果,但我也会得到字符串中没有'Ontario'的结果,甚至关闭它。会发生什么导致这种情况。它将返回一堆正确的行,然后是一些完全错误的行,然后再返回更正确的行。
返回行例如:
Brampton,Ontario,Canada
Toronto,Ontario,Canada
,Illinois,United States
Tecumseh,Ontario,Canada
Dayton,Ohio,United States
Keller,Texas,United States
Philadelphia,Pennsylvania,United States
Mississauga,Ontario,Canada
Toronto,Ontario,Canada
造成这种混乱的原因是什么?
感谢您提供的任何见解。