gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:33:24 29 4
gpt4 key购买 nike

如何在单个 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”放在链接到 id 的单独表格中。

使用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com