2010-10-11 42 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

相關問題