MySQL选择连接值中的位置

MySQL选择连接值中的位置,mysql,Mysql,我有一个名为orders的表,其中我有一个id串联的列示例这是指多个产品id示例它的存储方式:454678,如果我想选择连接表orderswhere products.id in(orders.productids)的表产品内部它只会列出一行,但如果我做同样的选择并将where products.id放入(454678)中,它会列出两行 既然这些值已经连接起来,可以在IN条件下使用,那么它应该可以工作了。它是否可以读取连接的两个id 花点时间,为订购的产品id创建一个链接表 订单和产品: 订单

我有一个名为
orders
的表,其中我有一个id串联的列示例这是指多个产品id示例它的存储方式:454678,如果我想选择连接表orders
where products.id in(orders.productids)的表产品内部
它只会列出一行,但如果我做同样的选择并将
where products.id放入(454678)
中,它会列出两行


既然这些值已经连接起来,可以在IN条件下使用,那么它应该可以工作了。它是否可以读取连接的两个id

花点时间,为订购的产品id创建一个链接表

订单和产品:

  • 订单号(主键)
  • 产品标识(PK)
  • 数量
  • 售价

这有很多优点,例如,您可以为联接使用索引

您的查询现在看起来是什么样子?您在一列中存储多个id值的设计“似乎是一个胜利”,但它带来了性能和数据完整性方面的问题。我强烈建议您阅读Bill Karwin的优秀著作《SQL反模式:避免数据库编程的陷阱》的第2章。(是的,可以编写一个查询来满足您的需求,但我认为给您举个例子不是一个好主意,因为这会促使您使用一个糟糕的设计。)谢谢您,我考虑过这一点,但我想避免这一点,以避免在预订过程中进行更多查询,所以我尝试将所有内容放在一列中,难道没有办法进行查询吗?总是有办法的,但这不应该是要遵循的。@user1361389:是的,有“进行查询的办法”,但提供该查询的任何人都不会真正帮助你。将id值存储在逗号分隔的列表中是个坏主意;您的设计试图“避免进行更多的查询”,但真正要做的是1)降低查询效率,2)禁用数据库强制执行引用完整性的能力。