[英]how do I inner-join an integer substring of a URL to an integer?
我在Joomla
有兩個MySQL
表: categories
和Menu
。
字段menu.link
具有類似index.php?option=com_content&view=category&id=175
。 最后一個等號之后的數字等於字段categories.id
。 我想創建INNER JOIN
兩個表之間,使categories.id
將等於在menu.link數。
我知道我必須刪除所有號碼,但是我該怎么做?
似乎您正在尋找一個SQL表達式,該表達式將從URL字符串中提取id
值。 這始終是一個簡單的建議,因為它取決於URL格式的不可預測的細節。
在MySQL中,這是一個雙重的提議,因為沒有任何正則表達式函數返回實際的字符串值。 它們僅返回true / false。 因此,您需要使用非正則表達式字符串處理功能來提取數據。
話雖這么說,讓我們破解。 該表達式將獲得該數字。
CAST(SUBSTRING_INDEX(menu.link,'view=category&id=',-1) AS INT) AS cat_id
這種字符串處理技巧的核心是字符串'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)
這將表現不佳。 但這可能是可以的,因為在任何一個表中都不會有成千上萬的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.