2009-03-30 6 views
8

私は手紙でグループ化した映画のリストを持っています。当然ながら、文字「T」で始まる映画は、「The」で始まる映画の約80%を有する。 「ダークナイト」などの映画は「D」リストに表示され、好ましくは「T」リストにも表示されます。私はそれを行うことができますどのような方法ですか?"the"という言葉を無視して、mysqlのタイトル順にどうやって注文しますか?

"the"を無視して特定の文字で始まるムービーを表示するには、WHERE句に次のコードを使用しますが、これは "The Dark Knight"などのムービーを手紙に表示する便利な副作用もあります"D"と "T"。

WHERE movie_title REGEXP CONCAT('^(the)?', '$letter') 

これは、データベースにあるすべてのムービーをエコーアウトするときに達成したいと思います。

+1

数式にレンチを投げる:数値で始まるタイトル( "101 Dalmations")は、数字が入力されたかのようにソートされていると考えられます。この場合、「O」の下に。 –

答えて

18

このクエリを頻繁に実行する場合は、テーブルに「ソート済み」という名前の別のフィールドを作成することをお勧めします。正規表現やその他の操作を使用すると、MySQLはインデックスを利用できなくなります。

したがって、最も簡単で効率的な解決方法は、movie_title_shortフィールドに「The」または「A」を付けずにmovie_titleを追加することです。 movie_title_shortフィールドには必ずインデックスを追加してください。

+0

私はそれについて考えましたが、それほど多くは実行されません。 –

+0

ストレージスペースはCPU時間よりも安いです。 title_orderフィールドを使用するのは、間違いなく同じ基準で注文したいからです。 – cletus

+0

また、別のフィールドを追加しても、「T」と他の文字リストに同じムービーを表示するという問題は解決しません。 –

1
select right(movie_title, char_length(movie_title)-4) as movie_title 
from movies 
where left(movie_title,3) = 'the' 
union 
select movie_title 
from movies 
あなたはselect句で関数を置き換えるMySQLを使用することができます
1

...

select replace(movie_title,'The ','') from ... order by replace(movie_title,'The ','')' 
+0

いいえ、彼は "The"の有無にかかわらず、一緒にダンプされたときに "The"ムービーが2回表示されることを望んでいます。 – GSerg

+0

同じWHERE句を使用する場合は同じです。あなたは-1コメントできますか? :) – ashawley

6

カールが言ったように、私はそれを毎回計算することを避けるために、独自の刃先交換式フィールドにこれを構築したいです。私は冗長性を避けるためにやや異なる方法でそれを行うことをお勧めしたいと思います。

movies (id, name, namePrefix) 

例:"name, namePrefix"または"namePrefix name"し、それに応じて並べ替えることができます:あなたは2つの異なる方法でこれらの映画を見ることができます

| Dark Knight  | The | 
| Affair To Remember | An | 
| Beautiful Mind  | A | 

この方法です。この

+0

"The"、 "An"、 "A"などのソート時にタイトルを駄目にする単語の正規リストがあるかどうかは誰にも分かりません。また、大文字の規則のルール:それは "覚えておくべきこと"か "覚えておくべき事"でなければならないか? – Evan

0

用途:

SELECT * FROM movies ORDER BY TRIM(LEADING 'the ' FROM LOWER(`movie_title`)); 
1

はちょうどその問題を抱えていた自分が...解決策は次のとおりです。

SELECT * FROM movies WHERE title REGEXP '^d' AND title NOT REGEXP '^the ' OR title REGEXP '^the d' 

これはあなたに "D" または "D"

で始まるだけの結果が得られます
関連する問題