Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更好的mysql选择查询过滤数据(PHP)_Php_Mysql_Select - Fatal编程技术网

更好的mysql选择查询过滤数据(PHP)

更好的mysql选择查询过滤数据(PHP),php,mysql,select,Php,Mysql,Select,我遇到了一个问题,我想从我的mysql数据库中搜索数据,就是这样。我有一个搜索字段,用户在其中输入位置名称,然后我在我的数据库中搜索该位置,并根据搜索的位置显示用户名,但我有一些用户在数据库中有多个位置,并用“逗号”,所以我的select查询无法找到,这就是我的数据库的外观 table name :- users username || location john || KIS,ITS alex || KIS 所以当有人搜索KIS时,它只显示alex的名字而不是j

我遇到了一个问题,我想从我的mysql数据库中搜索数据,就是这样。我有一个搜索字段,用户在其中输入位置名称,然后我在我的数据库中搜索该位置,并根据搜索的位置显示用户名,但我有一些用户在数据库中有多个位置,并用“逗号”,所以我的select查询无法找到,这就是我的数据库的外观

 table name :- users 

 username ||  location

 john    ||  KIS,ITS

 alex   || KIS
所以当有人搜索KIS时,它只显示alex的名字而不是john的名字,尽管他也是KIS的一部分,我想知道是否有更好的查询可以解决我的问题


感谢更新查询以获取新的问题要求

为…工作

基斯

基斯,(任何)在开始

(任何东西),基斯,(任何东西)在中间

(什么都可以),基斯终于来了

质疑


如果需要查找输入字符串的一部分,可以使用

SELECT * FROM users WHERE location LIKE '%KIS%'
如果需要获得正确的输入,可以使用

SELECT * FROM users
WHERE FIND_IN_SET(LOWER('KIS'), LOWER(location)) > 0

使用正则表达式

SELECT * FROM users WHERE location RLIKE '(^|[^_alnum])KIS($|[^_alnum])'
或者,如果数据总是用一个逗号分隔,则使用以下方法:

SELECT * FROM users WHERE location RLIKE '(^|,)KIS($|,)'

但是要知道,您的数据库不是第一标准格式,存储复杂数据并进行查找将极大地影响性能。如果可能,请使用单独的表来存储每个用户的位置。

您是否接受输入KIS也会得到类似KISK或KIST的位置?或者必须正确输入位置?作为一个补充点我们将重新构造数据,以使类似这样的查询更容易(可能更快)。我将有一个单独的“位置”表,并有一个新表将您的用户链接到您的位置。很抱歉,这对我不起作用,因为我需要与KIS不同的正确位置:-(更新答案以获取准确答案)match@kevin:我现在看到你的评论;好吧,用我的第二个例子,你的工作应该完成:)谢谢Zsolt,这似乎是真正的帮助,是的,我将学习遵循所有最佳实践,因为我在这里学到了很多关于堆栈溢出的知识
SELECT * FROM users WHERE location RLIKE '(^|[^_alnum])KIS($|[^_alnum])'
SELECT * FROM users WHERE location RLIKE '(^|,)KIS($|,)'