php - 如何选择不同的子字符串字段或删除重复字段

标签 php mysql sql

示例数据:

[{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/

相关文章:

c# - mysql 只返回一个值

php - 将 PHP 重定向到登录页面,而不是强制登录

php - 多个 MySQL 客户端连接到 1 个 MySQL 服务器

PHP Mysql内容抢先看

MySQL: "check the manual that corresponds to your MySQL server version for the right syntax to use near ' )' at line 14"

java - |已将 MySQL Connector 添加到库中,但仍然收到错误 'java.lang.ClassNotFoundException: com.mysql.jdbc.driver'

php - 在不刷新页面的情况下提交同一页面上的表单

phpMailer:向多个收件人发送电子邮件

php - 从两个表查询时如何使用外键

sql - 字符串或二进制数据将被截断。 -- 即使长度比字段长度短