Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按名称排序,但忽略引号?_Php_Mysql - Fatal编程技术网

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