PHP MySQL 在一个字段中搜索多个值

标签 php mysql search multiple-value

如何在单个 SQL 字段中存储多个值确保该数据可搜索?

例如我希望能够做到这一点

name | num
-----------
John | 21, 22, 34
Mike | 41, 32, 43
Dave | 12, 23, 34


$query = SELECT name from table WHERE num = '12' 
// result should be 'Dave'

$query = SELECT name from table WHERE num = '22' or num = 41 
// result should be John and Mike

我正在使用 PHP,所以我知道我可以在输入数据时序列化数据,然后反序列化并搜索结果数组,但是数据集非常大,所以这将是一个非常慢的查询,因为我必须检索整个数据集并循环生成的数组。

有什么我可能错过的吗?我真的不想为每个可能的选项创建一个表,因为每个组中绝对有大量的组和许多选项。

有什么想法吗?提前致谢

编辑:上面的示例只是一个示例,可以有任意数量的“nums”

最佳答案

为了获得最佳速度和效率,请将“nums”放在链接到 ids 的单独表中。

使用LIKE也可以工作,但是它还需要与字符串的一部分进行比较。根据数据集的大小,这也可能需要一些时间。

另一个选项是使用 word boundaries 的 mysql 正则表达式即:

SELECT name from table where nums REGEXP '[[:<:]]##[[:>:]]';

这些选项中的每一个都可以工作,但是将数据移动到单独的表是正确的方法,尤其是在存在很多可能性的情况下。

对于此方法,您需要三个表

People
-------
ID
NAME

Options
-------
ID
OPTION

Options_People
--------------
OPTION_ID
PEOPLE_ID

要让所有“人”都选择特定选项,请执行以下操作:

SELECT p.* FROM People p, Options_People op 
WHERE p.ID = op.PEOPLE_ID and OPTION_ID = #option#

要让所有“人”都具有多个选项中的任何一个:

SELECT p.* FROM People p, Options_People op 
WHERE p.ID = op.PEOPLE_ID and OPTION_ID IN ( #option1#,#option2#,#option#)

关于PHP MySQL 在一个字段中搜索多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471703/

相关文章:

php - 将多个字段合并为一个值以进行表单提交

javascript - 移动时给输入一个值,然后通过ajax保存它 - php/jquery -php

javascript - 提交按钮后触发 PHP 脚本 - 使用 React js

mysql - mysql更新多条记录真的没有办法吗?

search - 如何在vim搜索和vim替代之间共享searchText?

javascript - jQuery div 或使用输入字段名称

php - 加密用于票务系统的条形码上显示的 ID 的值

php - 类型错误:DateTime::__construct() expects parameter 1 to be string, object given in laravel

javascript - 根据匹配字符串对字符串数组进行排序

python - 向 Django 应用程序添加简单搜索