MySQL使用“contains”进行连接?

7

我有这两个表:

Table: ORDERS
ID - NAME    - DATA
---------------------------------------------
1  - Order 1 - node_checkout_nid";i:141;s:10:
2  - Order 2 - node_checkout_nid";i:142;s:10:

Table: NODES
NID - Description
--------------------
141 - bla bla bla
142 - bla bla bla 2

我需要一个SQL连接查询语句,可以在NID上连接这两个表格,并注意到NID在“DATA”列中。

最终的结果应为:

Table: RESULT
ID - NAME    - DATA                             NID - Description
-----------------------------------------------------------------------------------
1  - Order 1 - node_checkout_nid";i:141;s:10: - 141 - bla bla bla
2  - Order 2 - node_checkout_nid";i:142;s:10: - 142 - bla bla bla 2

我想使用“like”连接,但我认为(如果可能的话)“包含”连接会更好?非常感谢任何帮助!

1
停止在一个列中存储多个序列化值! - Dan Grossman
2个回答

7

您可以使用:

SELECT ID, NAME, DATA, NID, Description
  FROM ORDERS INNER JOIN NODES ON DATA LIKE CONCAT('%;i:', NID, ';%')

无论如何,这是一个很重的查询。将NID作为纯文本放在数据字段中并不是一个好主意,最好放在另一列中。


现在你只需要祈祷,NID不等于10 - Mchl
@Mchl:感谢您修复了它,我看到了错误,但当我尝试访问并修复时,我无法打开 :( - Borja
而且没错,你需要在正确的位置寻找NID。我用这个修复了查询。 - Borja

2

您的数据是非规范化的。您正在将某些序列化对象存储在DATA列中,并尝试基于此执行关系操作。虽然这是可能的,但请注意这将会很慢且潜在不可靠。只需将NID存储在单独的列中即可。


很遗憾,这对我来说不是一个选项。我知道它应该在一个单独的列中,但由于各种结构限制,这是不可能的。 - rockstardev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接