php - 选择字段内包含用户 ID 的 mysql 行

标签 php mysql sql select

我正在开发某种类型的私有(private)对话网站,我正在将对话存储在一个表中(消息存储在另一个表中)

这是格式:

  • Id:自增
  • Title:Varchar,代表 session 名称
  • 成员:保存有权访问对话的成员的 ID

我的问题是我存储成员的方式实在是太糟糕了。我正在使用 user1Id;user2Id;user3Id

尝试获取特定玩家的所有对话时出现问题。

我的问题是:有没有更好的方法来存储 ID? (如果可能,在一个字段上)并且还能够选择特定 ID 的所有对话?

最佳答案

“正确的”、规范化的数据库方式是有另一个表,member_conversation_map 有两列——成员 ID 和对话 ID,并用例如 查询它在 运算符中:

SELECT *
FROM   conversations
WHERE  id IN (SELECT conversation_id
              FROM   member_conversation_map
              WHERE  member_id = 123)

如果那不是一个选项,并且您确实必须将成员 ID 放在数据库的单个单元格中,那么至少使用逗号而不是分号作为分隔符。这将允许您使用 MySQL 的 find_in_set :

SELECT *
FROM   conversations
WHERE  FIND_IN_SET('123', members) > 0

关于php - 选择字段内包含用户 ID 的 mysql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39022896/

相关文章:

SQL:日期字段集中的最早日期

php - android 从 mysql 中检索数据并将其呈现在 recycleview 中并添加事件

php - 如何删除 CSV 文件中的第一行(列标题)?

php - 如何在 Memcache 或 Redis 中通过标签清除缓存?

php - 如何在安装了 php 的 IIS 上检查单个站点的传出 HTTP 请求?

php - 根据另一个表的值从一个表中进行选择

php - 使用日期参数/变量查询数据库中的记录

php - 来自mysql中多个表的不同值

mysql - 在 mySQL 中遇到 WHERE DATEDIFF 问题

SQL 将数据按行划分