您可能需要使用:
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