我在Joomla
有兩個MySQL
表:categories
和Menu
。如何將URL的整數子串內聯到整數?
該字段menu.link
具有類似於index.php?option=com_content&view=category&id=175
的值。 最後一個等號後面的數字等於categories.id
。 我想在兩個表格之間創建INNER JOIN
,這樣categories.id
將等於menu.link中的數字。
我知道我必須在數字前刪除所有數據,但我該怎麼做?
我在Joomla
有兩個MySQL
表:categories
和Menu
。如何將URL的整數子串內聯到整數?
該字段menu.link
具有類似於index.php?option=com_content&view=category&id=175
的值。 最後一個等號後面的數字等於categories.id
。 我想在兩個表格之間創建INNER JOIN
,這樣categories.id
將等於menu.link中的數字。
我知道我必須在數字前刪除所有數據,但我該怎麼做?
看來你正在尋找一個SQL表達式,它將從你的URL字符串中提取出id
值。這始終是一個冒險的命題,因爲它取決於URL格式的不可預知的細節。
在MySQL中這是一個雙重冒險的命題,因爲沒有任何返回實際字符串值的正則表達式函數。他們只返回真/假。所以你需要使用非正則表達式字符串處理函數來提取你的數據。
這就是說,讓我們破解。這個表達式會得到這個數字。
CAST(SUBSTRING_INDEX(menu.link,'view=category&id=',-1) AS INT) AS cat_id
該字符串處理破解的核心是字符串'view=category&id='
。 SUBSTRING_INDEX
函數檢索該字符串右側的所有內容,並且該運算僅使用整數。
如果未找到子字符串,則表達式將返回零。這可能或可能不是你想要的。 (我說,這是冒險的!)
因此,執行連接你會做這樣的事情:
SELECT Menu.whatever,
categories.whatever
FROM Menu
JOIN categories
ON categories.id = CAST(SUBSTRING_INDEX(menu.link,'view=category&id=',-1) AS INT)
這將表現不佳。但這可能是好的,因爲在任何表中都不會有成千上萬的行。