按字母顺序对查询结果进行排序,但在排序中排除“the”?

Posted

技术标签:

【中文标题】按字母顺序对查询结果进行排序,但在排序中排除“the”?【英文标题】:Sort query results alphabetically, but exclude "the" in sorting? 【发布时间】:2013-10-13 04:22:01 【问题描述】:

假设我有一个 Laravel 4 应用程序。假设我有一个填充的 Movies 表。

这个:

$movies = Movie::orderBy('title', 'ASC')->get();

返回这个:

Braveheart
Silent Hill
The Big Lebowski
Waterworld

我想要的是忽略排序中的“the”以返回:

The Big Lewbowski
Braveheart
Silent Hill
Waterworld

在 Laravel 中有什么东西可以让这件事变得简单吗?你会如何处理这个问题?我需要编写自定义 SQL 查询吗?

谢谢!

【问题讨论】:

【参考方案1】:

你好,早安

将结果存储在数组中。 遍历数组并删除所有的“The”。

类似这样的:

$str = "The quick brown fox jumps over the lazy dog."
if(substr($str, 0, 4) = 'The ')

    $str2 = substr($str, 4); // "quick brown fox jumps over the lazy dog."

从上面的东西创建一个新数组。

然后做这样的事情:

<?php

$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) 
    echo "fruits[" . $key . "] = " . $val . "\n";

?>

这将按字母顺序对它们进行排序:

fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange

就是这样

【讨论】:

【参考方案2】:

我对 Laravel 也一无所知,但这个查询可能会做你想做的事:

SELECT title
FROM movies 
ORDER BY 
    CASE 
       WHEN SUBSTRING(title FROM 1 FOR 4) = 'The '
       THEN SUBSTRING(title,5) 
       ELSE title 
    END DESC 

引用REPLACE 函数的另一个答案可能也足够好,但请注意REPLACE 将替换所有出现的目标字符串(例如“乱世佳人”将被更改。

【讨论】:

Laravel 不需要那些东西。它很智能,并且拥有 PHP 世界中最先进的 ORM 之一,称为 Eloquent。检查它并与 RAW 查询说再见。 @Netbulae 你将如何使用 Laravel Eloquent 编写这个精确的查询? 您可以将 case 放在 select 语句中。这里已经回答了一个类似的问题:Laravel eloquent select case【参考方案3】:

不确定 laravel 4 的语法,但是在 mysql 查询中你可以使用REPLACE

REPLACE(column, 'search', 'replace')

SELECT * FROM `movies` ORDER BY  REPLACE(`title`, 'The', '')

对于 laravel 4 希望它可以工作但不确定

$movies = Movie::orderBy("REPLACE(`title`, 'The', '')", "ASC")->get();

REPLACE

编辑 仅在字符串开头搜索“The”,您可以使用CASELEFT 来检查“The”的出现

 SELECT * FROM `movies` ORDER BY 
 CASE WHEN LEFT(`title`,4) ='The ' 
 THEN REPLACE(`title`, 'The ', '') 
 ELSE `title`
 END

$movies = Movie::orderBy("CASE WHEN LEFT(`title`,4) ='The ' 
 THEN REPLACE(`title`, 'The ', '') 
 ELSE `title`
 END", "ASC")->get();

【讨论】:

它将删除所有匹配项。即使 The 位于中间。所以不好!

以上是关于按字母顺序对查询结果进行排序,但在排序中排除“the”?的主要内容,如果未能解决你的问题,请参考以下文章

查询排序顺序问题

在自定义 foreach 循环中按字母顺序对结果进行排序

如何按字母顺序对 QTableView 中的项目进行排序

sql server 按字母顺序排序,然后是数字

按字母顺序对 NSMutableArray 进行排序[重复]

按字母顺序对状态中的项目进行排序