我有一個第三方組件存儲url的表,我想從這個url只獲得id
參數。用正則表達式選擇字段的一部分
在PHP中我能做到這一點是這樣的:
$subject = "index.php?option=com_content&catid=2&id=456&view=article"; //mysql query result
$pattern = '*[&?]id=([0-9]+)*'; //matches either ?id=456 or &id=456
preg_match($pattern, $subject, $matches);
echo $matches[1];//prints 456
匹配的將是一個新的查詢的一部分數量:
SELECT name FROM table1 WHERE id=the_match
現在,我認爲這將是快了很多做它直接通過mysql的,像
SELECT name FROM table1 WHERE id = (SELECT REGEX_MATCH('*[&?]id=([0-9]+)*', '$1') FROM table2 WHERE uniquefield1 = 'fred')
顯然SELECT REGEX_MATCH('*[&?]id=([0-9]+)*', '$1') FROM table2 WHERE uniquefield1 = 'fred')
完全發明,菊st說,我想選擇第一組匹配正則表達式,並使用它來使WHERE
條款工作。
是否可以用MySQL來做這樣的事情?
那麼,這也可以是有用的,你可以發佈一個在'WHERE'子句中使用正則表達式的例子嗎? – BackSlash
請參閱我的編輯 –
我的專欄名爲'origurl',所以我試過這個'SELECT CAST(RIGHT(origurl,LENGTH(origurl) - 3 - LOCATE('&id =',origurl))AS INTEGER)id id FROM j_sefurls WHERE origurl REGEXP'&id = [0-9] +'',它表示_#1064 - 您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在''AS id FROM j_sefurls WHERE origurl REGEXP'&id = [0-9] +'LIMIT 0,30'在行1_ – BackSlash