2010-10-11 65 views
1

大家的一部分,感谢您阅读的SQL领域的一个子......抓住其中一个字符串匹配的领域

我一直试图找到一个解决的SQL和PHP的问题,我有。下面是我尝试使用的表格的片段。

的表称为web_navbar_links领域被称为蛞蝓

+------------------+-------+ 
|  slug  | child | 
+------------------+-------+ 
|business-multiseat| 1 | 
+------------------+-------+ 
|consumer-multiseat| 1 | 
+------------------+-------+ 

我有一个字符串“多席位”我需要一个SQL查询,将搜索所有的行和拉回来第一子“业务”和/或“消费者”匹配字符串“multiseat”,也是孩子='1'。

我试图CONCAT_WS和喜欢,但不觉得他们是正确的命令,除非OFC我不知道有用法:d

如果有人可以帮助我,我会非常感激。

丹。

+0

所以你不想 “企业多席位” 回来了,你想 “业务”?这个'-multiseat'会在公司出现后总是出现,即你只搜索后缀? – Rup 2010-10-11 11:24:03

+0

是的,我只会在分隔符返回之前需要后缀。 – zealisreal 2010-10-11 11:33:00

回答

1

您可能需要使用:

SELECT DISTINCT SUBSTRING(slug, 1, INSTR(slug, '-') - 1) result 
FROM  web_navbar_links 
WHERE SUBSTRING(slug FROM INSTR(slug, '-') + 1) = 'multiseat' AND child = 1; 

不过请注意,这可能是缓慢的,如果你打算在你的web_navbar_links表中的许多行。如果存在这样的查询,将不能使用slug上的索引。


测试用例:

CREATE TABLE web_navbar_links (id int, slug varchar(70), child int); 

INSERT INTO web_navbar_links VALUES (1, 'business-multiseat', 1); 
INSERT INTO web_navbar_links VALUES (2, 'business-singleseat', 1); 
INSERT INTO web_navbar_links VALUES (3, 'consumer-noseat', 1); 
INSERT INTO web_navbar_links VALUES (4, 'consumer-multiseat', 1); 
INSERT INTO web_navbar_links VALUES (5, 'something', 1); 
INSERT INTO web_navbar_links VALUES (6, 'business-multiseat', 2); 
INSERT INTO web_navbar_links VALUES (7, 'something-else', 2); 

结果:

SELECT id, SUBSTRING(slug, 1, INSTR(slug, '-') - 1) result 
FROM  web_navbar_links 
WHERE SUBSTRING(slug FROM INSTR(slug, '-') + 1) = 'multiseat' AND child = 1; 

+------+----------+ 
| id | result | 
+------+----------+ 
| 1 | business | 
| 4 | consumer | 
+------+----------+ 
2 rows in set (0.00 sec) 
+0

谢谢你的回应,我想我理解了这个脚本的要点,我是否正确地认为缩短版本的slug会从db中返回$ row-> slug? – zealisreal 2010-10-11 12:05:56

+0

@Daniel:不,作为'$ row-> result',除非你在查询的第一行中改变'result'别名:) – 2010-10-11 12:12:21

+0

Briliant,作品魅力,非常感谢你的帮助。 – zealisreal 2010-10-11 12:15:50

相关问题