MySql LIKE'%str%'返回错误的结果

时间:2016-11-19 20:15:16

标签: php mysql mysqli

所以我有一个表,其中有多个列,一个是保存用户位置的字符串,例如:'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

造成这种混乱的原因是什么?

感谢您提供的任何见解。

0 个答案:

没有答案