我在MySQL
中有两个Joomla
表:categories
和Menu
。
字段menu.link
的值为index.php?option=com_content&view=category&id=175
。
最后一个等号后面的数字等于字段categories.id
。
我想在两个表之间创建INNER JOIN
,以便categories.id
等于menu.link中的数字。
我知道我必须在号码前删除所有内容,但我该怎么办呢?
答案 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)
这将表现不佳。但这可能没问题,因为在这两个表中你都不会有成千上万的行。