Php 按名称排序,但忽略引号?
是否仍然可以按名称对列进行排序,并忽略作为某些项的引号 例如: “这很酷” 另一篇文章 第二条 你好 将分类为: 另一篇文章 第二条 你好 “这很酷” 引用已在数据库中Php 按名称排序,但忽略引号?,php,mysql,Php,Mysql,是否仍然可以按名称对列进行排序,并忽略作为某些项的引号 例如: “这很酷” 另一篇文章 第二条 你好 将分类为: 另一篇文章 第二条 你好 “这很酷” 引用已在数据库中 SELECT * FROM table ORDER BY CASE WHEN len(col) >= 2 THEN REPLACE(LEFT(COL, 1), '"', '') + RIGHT(LEFT(col, LEN(col)-1), LEN(LEFT(
SELECT *
FROM table
ORDER BY CASE WHEN len(col) >= 2
THEN REPLACE(LEFT(COL, 1), '"', '')
+ RIGHT(LEFT(col, LEN(col)-1), LEN(LEFT(col, LEN(col)-1))-1)
+ REPLACE(RIGHT(col, 1), '"', '')
ELSE col
END
在顺序中,我通过将“第一个和最后一个字符”中的双引号替换为“”来消除双引号。当然,它仅在col length>=2时有效。取决于您使用的语言。在MS SQL中,我使用REPLACE命令。因此,如果我有一个表,users,其列名是我排序的依据,我会这样做,从字符串中去掉所有双引号:
SELECT *
FROM dbo.Users
ORDER BY REPLACE(firstName, '"', '')
一个可以接受且比基于TRIM()或REPLACE()的解决方案更快的技巧是只关注第一个字符,即引号(或者扩展为非字母数字字符)
一般来说,对于较大的数据集,这种处理应该在加载时完成,例如添加用于查询目的的列,而不是用于显示目的的列。REPLACE将删除名称中的所有引号。您是对的。但它仅在排序时删除,而不是从数据本身删除。看来kylex只是想不加引号地对所有东西进行排序。因此,这将对如下内容进行排序:Ar“ticle 3糟糕的示例,但这就是我现在所能想到的。无论哪种方式,因为它不会影响返回的数据,所以我认为不会有问题。但它不会以某种方式影响排序顺序吗?它确实会影响排序顺序,但仅对其中包含双引号(“)的项。因此,任何没有双引号的名称都将按正常顺序排列,任何带有引号的名称都将被剥离并相应地排序。所以我猜它会是这样的:正常的有序名称:第2条,第1条,第1条,第2条。所以基本上它修改了他所需要的顺序,也就是没有引号的顺序。如果他想在一开始就忽略引用,那么这是行不通的。抱歉弄得一团糟。如果没有格式化选项,我很难打字。我试过这个。它就像一个符咒。它没有从我想要显示的数据中删除引号,但在排序时它实际上忽略了引号。所以答案这个词出现在“AWSOME”之前。这在大型数据集上会很慢!对于更复杂的需求,另一种选择是提前计划表,以包含一个用于排序的专用列,以保存值的预处理版本。例如,存储
name=“Dr.Strange Love”
和name\u sort=“Love,Strage,Dr.”
SELECT * FROM yourTable ORDER BY TRIM(BOTH '"' FROM title);
SELECT name
FROM myTable
ORDER BY replace(name, '"', '')
ORDER BY CASE LEFT(myCol, 1)
WHEN '"' THEN REPLACE(myCol, '"', '')
ELSE myCol
END CASE