【问题标题】:Two tables, whit one to many relationship. How to join values without duplicate rows?两个表,具有一对多的关系。如何在没有重复行的情况下连接值?
【发布时间】:2013-07-17 08:47:28
【问题描述】:

我有一个名为“消息”的表格和另一个名为“投票”的表格。每条消息可以有多个投票,实际上它们被放置在不同的行中的问题。我该如何解决它?

实际查询是:

SELECT messages.ID, votations.value
FROM messages 
LEFT JOIN votations ON messages.ID=votations.messageID

【问题讨论】:

  • 有趣的是,你做对了,现在你想要错误的解决方案。为什么?如果您将选票显示为列,您会得到什么?它目前的工作方式有什么问题?

标签: mysql database pdo


【解决方案1】:

不幸的是,您不能仅在 MySQL 中执行此操作。在结果集中,您不能有具有不同(数量)列的行。您需要实现一些应用程序逻辑。你能得到的最接近的是:

select m.id, GROUP_CONCAT(voto SEPARATOR ',') 
from messages m 
left join votations v on v.messageID = m.id
group by m.id;

这将返回这种格式:

ID  GROUP_CONCAT(VOTO SEPARATOR ',')
1   2,5,6
2   2,12,3

你可以在这里看到这个工作:http://sqlfiddle.com/#!2/241a8/3

【讨论】:

  • 没关系,但在我的项目中不起作用..我在 69 ID: 69 [BLOB - 5 B] 上有这个结果
  • 在这种情况下,在连接之前尝试将 voto 转换为不同的(字符串)数据类型(当前是 voto 的数据类型)。
  • 您在 phpmyadmin 中尝试过吗?查看以下问题:stackoverflow.com/questions/2188264/…
  • 其实voto是decimal(10,0)类型...所以我必须将它设置为TEXT?
  • GROUP_CONCAT 是将字符串连接在一起。我怀疑 MySQL 在连接它们之前默认将字段转换为 blob。将该字段保留为小数,但在 GROUP_CONCAT 中执行 CAST。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2020-09-27
  • 2021-03-28
  • 2013-11-15
  • 1970-01-01
相关资源
最近更新 更多