PHP MySQL在一个字段中搜索多个值
如何在单个SQL字段中存储多个值并确保此数据可搜索 例如,我希望能够做到这一点PHP MySQL在一个字段中搜索多个值,php,mysql,search,multiple-value,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' 或 我使用PHP,因此我知道我可以在输入数据时序列化数据,然后取消序列化并搜索结果数组,但数据集非常大,因
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'
或
我使用PHP,因此我知道我可以在输入数据时序列化数据,然后取消序列化并搜索结果数组,但数据集非常大,因此这将是一个非常缓慢的查询,因为我必须检索整个数据集并循环搜索结果数组
有什么我可能错过的吗?我真的不想为每个可能的选项创建一个表,因为每个选项中绝对有大量的组和许多选项
有什么想法吗?提前谢谢
编辑:上述示例只是一个示例,可能有任意数量的“num”num pivot表的名称可能是实现这一点最优雅的方法您应该这样做:
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'
为每个组合创建一个条目:
John | 21
John | 22
John | 23
Mark | 19
Mark | 22
如果您在youtable中有任何传统信息,请创建2个表:
Users:
UserId |FirstName |Lastname
1 |John |Doe
2 |Mark |Hamill
Options:
UserId |Num
1| 21
1| 22
1| 23
2| 19
2| 22
如果必须坚持现有的数据库结构
只需一列,就可以将其存储为text/varchar。
只需在字符串的开头和每个数字| 21 | 21 | 23 |之后放置一个管道(或任何其他字符)。然后可以使用类似“%”23 |的搜索
这非常缓慢和丑陋,但有时添加表或AOLUM不是一个选项。为了获得最佳速度和效率,请将“NUM”放在一个单独的表中,链接到ids 使用也可以,但是它还需要与字符串的一部分进行比较。根据数据集的大小,这也可能需要一些时间 另一个选项是使用ie的mysql正则表达式: 要让所有“人”都有一个特定的选择,需要:
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#)
从“按名称分组”表中选择“名称”、“分组”(num)是否意味着为每组选项创建一个表,每个选项有一行,另一个表链接这两个选项?您应该为“名称”和“num”的每个有效组合创建一个条目。约翰| 21;John | 22,John | 23这样做会比使用联接慢吗?对我来说,问题是其中的选项组和选项的数量太多了——目前存储为PHP数组,我渴望找到一个合适的解决方法。速度要慢得多!如果你有其他选择,不要这样做。只做了一次,因为我们有一些使用数据库的第三方软件,如果我修改数据库连接可以使用索引,它们会崩溃。Ashley,它们不像你说的那么邪恶。它们是比这更好的解决方案。
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#)