示例数据:
[{url: bing.com},
{url: bing.com/search?q=test},
{url: rt.com/test}]
目前我所做的是返回一个过滤后的网址,删除“/”之后的任何内容
SELECT url,
CASE WHEN LOCATE('/', url) THEN LEFT(url, LOCATE('/', url) - 1)
ELSE url END AS editedUrl
FROM testTable;
现在的输出结果是
url[0] = bing.com
url[1] = bing.com
url[2] = rt.com
我现在想做的是删除重复项,这意味着它只会返回 url[0]
和 url[2]
,我尝试这样做
SELECT DISTINCT url,
CASE WHEN LOCATE('/', url) THEN LEFT(url, LOCATE('/', url) - 1)
ELSE url END AS editedUrl
FROM testTable;
但是,它会根据实际值而不是过滤后的值来比较 url。
请帮忙, 谢谢。
最佳答案
您必须按编辑的 URL 进行分组:
SELECT MIN(url),
CASE
WHEN LOCATE('/', url) THEN LEFT(url, LOCATE('/', url) - 1)
ELSE url
END AS editedUrl
FROM testTable
GROUP BY editedUrl
如果您只想要一个唯一的editedUrl:
SELECT DISTINCT
CASE
WHEN LOCATE('/', url) THEN LEFT(url, LOCATE('/', url) - 1)
ELSE url
END AS editedUrl
FROM testTable
关于php - 如何选择不同的子字符串字段或删除重复字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38139927/