如何将URL的整数子字符串内部连接到整数?

时间:2014-04-26 14:24:09

标签: mysql sql regex string inner-join

我在MySQL中有两个Joomla表:categoriesMenu

字段menu.link的值为index.php?option=com_content&view=category&id=175。 最后一个等号后面的数字等于字段categories.id。 我想在两个表之间创建INNER JOIN,以便categories.id等于menu.link中的数字。

我知道我必须在号码前删除所有内容,但我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

您似乎正在寻找一个SQL表达式,它将从您的URL字符串中提取id值。这总是一个冒险的主张,因为它取决于URL格式的不可预测的细节。

这在MySQL中是一个双重冒险的命题,因为没有任何regexp函数可以返回实际的字符串值。它们只返回true / false。因此,您需要使用非正则表达式字符串处理函数来提取数据。

话虽如此,让我们劈开。这个表达式将得到这个数字。

CAST(SUBSTRING_INDEX(menu.link,'view=category&id=',-1) AS INT) AS cat_id

这个字符串处理hack的核心是字符串'view=category&id='SUBSTRING_INDEX函数检索该字符串右侧的所有内容,CAST操作只接受整数。

如果未找到子字符串,则表达式返回零。那可能是也可能不是你想要的。 (我说这很冒险!)

因此,要执行连接,您需要执行以下操作:

SELECT Menu.whatever, 
       categories.whatever
  FROM Menu
  JOIN categories 
    ON categories.id = CAST(SUBSTRING_INDEX(menu.link,'view=category&id=',-1) AS INT)

这将表现不佳。但这可能没问题,因为在这两个表中你都不会有成千上万的行。