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

标签 php mysql sql arrays select

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

数组在数据库中看起来像这样:

[2,3]   

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

最佳答案

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

如果你不能这样做,你可以砍掉第一个和最后一个字符([]),然后使用 find_in_set在剩余的逗号分隔字符串上:

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

关于php - 如何检查存储在数据库中的数组中是否存在值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158043/

相关文章:

php - 部落冲突 API |错误 :14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

php - 如何将 2 个模型请求合并到一个查询中

SQL LEFT JOIN 子查询别名

php - Google Recaptcha 错误,登录时未完成拼图但显示勾号

php - 注意第 3 行的 : Undefined index: id in C:\xampp\htdocs\libsys\edit. php

php - MySQL 在删除后继续添加 2 个额外的行!

mysql - 用 mysql 命令替换 sqlplus 命令

php - Codeigniter where 子句不起作用

java - ORA-0 [BEA][Oracle JDBC 驱动程序] 未处理的 sql 类型

sql - 使用 CASE 和 IN 进行更新 - Oracle