如何检查数据库中存储的数组中是否存在值

时间:2019-01-12 08:51:04

标签: php mysql sql arrays select

我有一个数据库,其中包含用户ID和朋友ID。 friend_ids保存为数组。我有一个页面,其中应显示所有时刻。我想检查包含特定ID的时刻。例如,我做了一个自己的时刻,因此我的ID位于user_id字段中,但我的一个朋友也创建了一个时刻,因此我位于friend_ids中。现在,我需要在此页面上检查我的ID是否出现在user_id或friend_ids表中。如何检查数据库数组中是否存在值?我是否必须获取所有记录并遍历它们以检查数组,还是有更好的方法?

该数组在数据库中如下所示:

[2,3]   

这就是我的数据库架构现在的样子,我还没有设置表之间的任何关系。 This is how the database looks like right now

2 个答案:

答案 0 :(得分:2)

作为一般建议,这不是将内容存储在数据库中的好方法。您最好创建一个联结表来保存每对用户的友谊状态。

如果不能这样做,则可以将第一个和最后一个字符([])切掉,并在其余的逗号分隔的字符串上使用find_in_set:< / p>

SELECT *
FROM   mytable
WHERE  SELECT FIND_IN_SET(123, TRIM(TRAILING ']' FROM TRIM(LEADING '[' FROM friend_ids))) > 0
-- Just an example -------^ 

答案 1 :(得分:1)

像Mureinik建议的那样,尽管他为您的问题提供了解决方案,但您最好更好地表示数据。 随着时间的流逝,friend_ids字段会变得非常大,并会影响性能。

在下图中,您可以看到我如何使用* _ids列并为每个数据集设置专用的数据透视表,这样,您可以通过添加JOIN子句轻松地结识朋友。

尝试阅读有关模型或实体关系的更多信息(您可能会在Laravel文档中找到很好的例子)

Database suggestion

如有任何疑问,请告诉我。