2014-04-26 48 views
0

我在Joomla有兩個MySQL表:categoriesMenu如何將URL的整數子串內聯到整數?

該字段menu.link具有類似於index.php?option=com_content&view=category&id=175的值。 最後一個等號後面的數字等於categories.id。 我想在兩個表格之間創建INNER JOIN,這樣categories.id將等於menu.link中的數字。

我知道我必須在數字前刪除所有數據,但我該怎麼做?

回答

1

看來你正在尋找一個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) 

這將表現不佳。但這可能是好的,因爲在任何表中都不會有成千上萬的行。