PHP SQLite3查询忽略第一个单词

PHP SQLite3查询忽略第一个单词,php,sqlite,Php,Sqlite,我正在使用sqlite3作为电影目录的本地数据库。它按我想要的字母顺序显示。一切都很好,但我想忽略电影片名开头的“the”一词。例如,如果数据库中的标题是“伟大的盖茨比”,而不是按字母顺序显示在T下,我希望它列在G下。所有结果都列在一页上。它们是否是对数据库的查询,可以按如下顺序返回结果 $db = new SQLite3('Movie Database.db'); $results = $db->query("SELECT * FROM Movies"); $list = ''; w

我正在使用sqlite3作为电影目录的本地数据库。它按我想要的字母顺序显示。一切都很好,但我想忽略电影片名开头的“the”一词。例如,如果数据库中的标题是“伟大的盖茨比”,而不是按字母顺序显示在T下,我希望它列在G下。所有结果都列在一页上。它们是否是对数据库的查询,可以按如下顺序返回结果

$db = new SQLite3('Movie Database.db');

$results = $db->query("SELECT * FROM Movies");

$list = '';
while($row = $results->fetchArray()) {

$id = $row["id"];
$MovieTitle = $row["MovieTitle"];
$MovieYear = $row["MovieDate"];
$MovieRes = $row["MovieRes"];
$FileName = $row["FileName"];
$Summary = $row["Summary"];
$Genres = $row["Genres"];
$PictureLocation = $row["PictureLocation"];
$Rating = $row["Rating"];
$ReleaseDate = $row["ReleaseDate"];


//BUILD THE MOVIES RESULT OUTPUT
$list .= '<div class="box">
          <div class="movie">
          <div class="movie-image"><span class="play"><a href="movielist.php?movie='.$FileName.'"><span class="name">'.$MovieTitle.'</span></span><img src="'.$ThumbnailPic.'" alt=""></a></div>
          <div class="rating">
          <p><a href="movie-info.php?movie='.$id.'">RATING: </a>'.$Rating.'</p>
          <div class="stars">
          <div class="'.$StarGraphic.'"></div>
          </div>
          <span class="comments"></span></div>
          </div>';

  }
$db=newsqlite3('moviedatabase.db');
$results=$db->query(“从电影中选择*);
$list='';
而($row=$results->fetchArray()){
$id=$row[“id”];
$MovieTitle=$row[“MovieTitle”];
$MovieYear=$row[“MovieDate”];
$MovieRes=$row[“MovieRes”];
$FileName=$row[“FileName”];
$Summary=$row[“Summary”];
$Genres=$row[“Genres”];
$PictureLocation=$row[“PictureLocation”];
$Rating=$row[“Rating”];
$ReleaseDate=$row[“ReleaseDate”];
//构建结果输出
$list.='
“.$评级。”

'; }
一个快速而简单的解决方案是:-

SELECT *,replace(MovieTitle,'The ','') AS sortby FROM Movies ORDER BY sortby;
可能的缺点是,标题中其他地方的
可能会对排序产生影响。(注意
后面的空格,以免影响包含的单词)

结果如下所示:-

如果要确保只忽略第一个,则可以使用以下方法:-

SELECT *,
CASE 
    WHEN substr(movietitle,1,4) = 'The ' 
    THEN substr(movietitle,5)
    ELSE movietitle
END AS sortby
FROM movies
ORDER by sortby
您也不能通过直接对结果排序(截断)来获得额外的列。前面两个查询的等价物可以是:-

SELECT * FROM movies ORDER BY replace(MovieTitle,'The ','');


最简单的解决方案是改变保存标题的方式:
Great Gatsby,The
您还可以在排序中添加带有标题的特殊字段,而不必添加
The
。如何将其合并到具有LIKE和GLOB的查询中?我仅有的其他查询与此类似
SELECT*来自MovieTitle像'a%'的电影
SELECT*来自MovieTitle GLOB'[0-9]*'
所以如果你想得到所有以“a”或“T”或GLOB开头的电影(如果它们以数字开头)@Micha只需在FROM和ORDER子句之间添加WHERE子句,例如,
SELECT*,CASE WHEN substr(movietitle,1,4)=“the”THEN substr(movietitle,5),否则movietitle将在电影中以sortby结尾,其中movietitle类似于sortby订购的“a%”
选择*,当substr(movietitle,1,4)=“THEN substr(movietitle,5)ELSE movietitle根据排序从movietitle GLOB“[0-9]*”的电影中排序结束时的情况SELECT * from movies ORDER BY CASE WHEN substr(MovieTitle,1,4) = 'The ' THEN substr(MovieTitle,5) ELSE MovieTitle END;