0

所以我有一个存储在数据库(序列化)中的数组,其中包含来自用户的 ID。

array1 = serialize(array(1,2,3,4,5));

假设我们在数据库中有 100 次不同的 ID 和数组大小(所以 100 条记录)

array2 = serialize(array(6,2,8,1,3,10,12,60));
...

数组存储在数据库中,带有表名项目和“查找”行。

table 'items': (id,itemId,lookup)

现在我想搜索那些匹配一个 ID(例如 ID=2)的序列化数组。对于那些匹配的,我想要 itemId。

我可以尝试使用“like %2%”的 SQL 查询,但这也将匹配 %22% 等。我可以选择所有内容并在每个数组中执行一些 foreach() 循环,但这听起来非常耗时。

任何想法,想法是如何做到这一点的?

4

2 回答 2

0

我不确定这是否有用,但您是否尝试过使用

if(in_array("yourObject",$yourArray)){

?

于 2013-03-06T13:52:31.177 回答
0

使用like运算符。

如您所写,您可以使用“like %2%”,但也可以选择“22”。关键是也要在字符串中插入分隔符。

考虑您的序列化字符串如下所示:

";1;2;3;4;5;"

例如,您可以使用 this搜索2 的外观column LIKE "%;2;%",这将不匹配 22。不要忘记在序列化字符串的末尾和开头输入分隔符。

注意:对于长序列化字符串,这种技术可能会很慢。如果您希望您的表有很多行,您应该考虑另一种方案。搜索多对多关系可能会更好

于 2013-03-06T14:02:21.923 回答