您可能需要使用:
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)
所以你不想 「企業多席位」 回來了,你想 「業務」?這個'-multiseat'會在公司出現後總是出現,即你只搜索後綴? – Rup 2010-10-11 11:24:03
是的,我只會在分隔符返回之前需要後綴。 – zealisreal 2010-10-11 11:33:00