大家好,感谢您阅读...
我一直试图找到修复我的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
如果有人能帮助我,我会非常感激。
丹
答案 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)