【问题标题】:Same id's but only fetch 1 result相同的 id 但只获取 1 个结果
【发布时间】:2015-12-10 19:19:30
【问题描述】:

我即将制作一个消息系统。我不想制作像conversationsmessages 这样的两张表,我只想拥有messages。然后会有很多具有相同用户 ID 的行,如下所示:

id     to_id     from_id     message
1      1         2           text...
2      1         3           text...
3      2         1           text...
4      1         2           text...
5      1         2           text...
6      1         2           text...

问题是,我想在每个对话中获得一个。如果 id 1 向 id 2 写入,那么这就是 1 个对话,但如果 id 2 向 id 1 写一个回复,那么它仍然只是 1 个对话。

在上面的例子中,只有 2 个对话(id 1 到 id 3)和(id 1 到 id 2 和反向)。

我怎样才能做到这一点。我的想法是一定有比 DISTINCT 更简单的东西。

【问题讨论】:

  • 在创建记录时为什么不生成新的conv_id 或使用现有的conv_id
  • @AbraCadaver 见....这就是我有时讨厌自己的原因。发布答案!谢谢。

标签: php mysqli


【解决方案1】:

我可能会选择一个相关的表格,但为了简单起见,只需添加列 conv_id

创建消息后,创建一个新的conv_id 并将其与其他数据一起添加到表行中。当回复消息时,只需将 conv_id 用于新行。

当您想要检索对话时,请选择WHERE conv_id=x 和/或使用GROUP BY conv_id

【讨论】:

  • 我可以轻松地制作另一张桌子,但为什么有两张桌子而不是一张呢?性能更差吗?
【解决方案2】:

为什么不使用 group by 加入对话:

select * from table where to_id = 1 group by from_id

【讨论】:

  • 如果 from_id=2 和 to_id=3 怎么办?然后,这将包含在 2 对 1 对话中,而 1 对 2 将是一个单独的对话。
猜你喜欢
  • 2019-10-29
  • 2019-03-05
  • 2014-02-14
  • 1970-01-01
  • 2017-04-28
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多