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