2011-03-07 18 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任何索引。