【问题标题】:How to search for an ID in an array stored in a MySQL Database with PHP如何使用 PHP 在存储在 MySQL 数据库中的数组中搜索 ID
【发布时间】:2013-03-06 12:38:11
【问题描述】:

所以我在数据库中存储了一个数组(序列化),其中包含来自用户的 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() 循环,但这听起来非常耗时。

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

【问题讨论】:

  • 你能解释一下它以哪种格式存储在数据库中吗?
  • 没关系,哪种格式最适合解决方案。
  • 你可以试试mysql的FIND_IN_SET方法
  • 不要这样做。改为规范化您的数据库。
  • @Jack 规范化数据库到底是什么意思(在这种情况下)?可以举个例子吗?

标签: php mysql arrays


【解决方案1】:

使用like 运算符。

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

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

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

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

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

【讨论】:

  • 感谢您对like 运算符的解释。它们将是很多行并且数组可能会变大,因此多对多关系可能是一种解决方案。我将阅读更多关于它的内容。
【解决方案2】:

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

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

?

【讨论】:

  • 是的,这比我的意思的 foreach 循环要好,但看起来仍然非常耗时。
猜你喜欢
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多