【问题标题】:PHP MySQL inner join issuesPHP MySQL内部连接问题
【发布时间】:2013-07-31 15:56:33
【问题描述】:

基本上我有两个表:节点和性质。节点有一个自动递增的 ID,自然有一个“节点”列,这就是我在这里关注的内容。节点列包含来自节点表(自然条目所在的节点)的分隔 ID 字符串。

自然表中节点列的示例可能如下所示:

.1.10.597.598.599.600.

每个 id 前后都有句点,因此我可以搜索节点中的所有图像(例如 WHERE node LIKE '%.".$_GET['id'].".%')。

话虽如此,我正在尝试从节点表中选择在自然表中有条目的所有条目。这是我到目前为止所得到的,但它返回一个空集。

SELECT *
FROM nodes A
INNER JOIN nature B
ON A.id LIKE '%.B.node.%'

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql sql database inner-join


    【解决方案1】:

    使用CONCAT 函数

    ON A.id LIKE CONCAT('%.',B.node,'.%')
    

    【讨论】:

    • 仍然返回一个空集。就像我在其他评论中所说的那样,句点需要环绕节点 ID,因为它们是分隔符。
    • 我可以更新它,但您可能还想确保数据存在,如果它返回一个空集。
    • 数据存在。大部分节点都有自然条目。
    【解决方案2】:

    试试:

    SELECT *
    FROM nodes A
    INNER JOIN nature B
    ON B.node LIKE CONCAT('%.',A.id,'.%')
    

    请注意,这是相当昂贵的,因为它阻止了对索引的任何使用。

    fiddle

    【讨论】:

    • 这不太行。请注意,当您搜索 %.B.node.% 时,这些句点很重要,因为节点列由句点分隔。因此,当我搜索 597 的节点 ID 时,它需要是 %.B.node.% 因为 597 包含在句点中。请参阅我提出的节点列示例。这有意义吗?
    • 是的,我刚刚注意到并添加了句点。对不起
    • 仍然有趣的是它返回了 409,248 个结果,其中只有 882 个节点和 464 个自然条目。啊哈,它正在为每个点头条目选择所有自然条目(882 * 464 = 409,248)
    • 起初我错过了一些东西。这是相反的方式。这似乎有效。
    • 仍然为什么返回 4,586 个结果...只有 882 个条目中包含自然条目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2020-11-20
    • 2020-01-22
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多