获取SQL字段的子字符串,其中字符串与字段的一部分匹配

时间:2010-10-11 11:21:25

标签: mysql

大家好,感谢您阅读...

我一直试图找到修复我的SQL和PHP问题。下面是我正在尝试使用的表格的片段。

该表名为web_navbar_links,该字段称为slug

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

我有一个字符串“multiseat”我需要一个SQL查询,它将搜索所有行并拉回匹配字符串“multiseat”的第一个子字符串“business”和/或“consumer”,并且也是child ='1 ”。

我已经尝试过concat_ws和LIKE,但是不要觉得它们是正确的命令,除非我不明白它的用法:D

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

1 个答案:

答案 0 :(得分: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)