2011-03-07 56 views
2

有沒有辦法做到爲開始,但可能無法完全包含一個給定的字符串數據字段MySQL查詢?的MySQL查詢「開頭,但不能完全包含」

舉例來說,如果我有數據項的以下列表:

my_table 
1. example.com 
2. example.com/subpage 
3. subdomain.example.com 
4. ain.example.com 
5. ple.com 

我想喂

  • 「example.com/subpage」,回到#1,#2
  • 「example.com」,回到#1
  • 「wexample.com」 不返回任何
  • 「EXA」 不返回任何
  • 「subdomain.example.com/subpage」,返回3號

非常感謝!

回答

4

考慮:

CREATE TABLE paths (path VARCHAR(255) NOT NULL); 

搜索 「example.com/subpage」 需要下列查詢:

SELECT * FROM paths WHERE INSTR("example.com/subpage", path) = 1; 

只是不要試圖在一個大的數據集頻繁地運行它.. 。

文檔:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_instr

+0

太棒了!我需要在大型數據集上運行它,並且經常使用它:)但這是有效的。 – Kyle 2011-03-07 03:13:21

+0

當我還是學生的時候,在哪裏是stackoverflow:/ – Dimitry 2011-03-07 03:13:59

+0

哦,這個問題不是作業。我已經收到了很多東西。一定是我青春活力。 :) – Kyle 2011-03-07 03:16:10

0

由於您的測試數據表明您不希望字符一個字符匹配(但更多的東西一樣通過色差分量),拆分輸入到組件和所有前綴搜索。

0

如果你想返回example.co結果而不是考試,你不是在尋找「開始於」的輸入。不知道問題是否有錯或者是那裏的例子。

如果這些示例是正確的,那麼您需要做一些事情來確定您的輸入是否爲URL,或者使用像正則表達式這樣的模式匹配,或者至少指定一些關於您想要匹配的固定規則。在做出正確的建議之前,您可能需要解釋這些規則。

這可能是因爲之前提取任何東西一樣簡單的「/」(如果有),或使用你的應用打破了你的請求的URL組件和路徑組件。

Mode info on regex in mysql

+0

考試是爲了證明我需要一個「整場比賽」,但整場比賽可能會超過 – Kyle 2011-03-07 03:12:10

0

看來你想要的列值以匹配您的模式的開始:

SELECT * FROM my_table WHERE 'example.com' LIKE CONCAT(my_table.my_column, '%'); 

這種方法的缺點是,它不打算使用的my_column任何索引。