2

私は(成功せずに)単一のアルファベット文字で始まる「タイトル」フィールドを持つレコードのグループを選択するMYSQLクエリを構築しようとしましたが、「The」、「An」、または「A」の場合は最初の単語を無視します"。クエリの ORDER BY 部分でこれを行う例をたくさん見つけましたが、正しいレコードが見つからない場合は順序が関係ないため、それを行う必要があるのは最初の WHERE 部分です。使用する

WHERE title LIKE "R%"

これを最初の文字として含むタイトル (例: "Robin Hood") だけが表示されますが、"The Red House" には一致しません。ある種のREGEXが必要だと思いますが、それを機能させることができないようです。

たとえば、次の映画のタイトルが与えられた場合、

ロードハウス

王の帰還

マンマ・ミーア

アルゴ

タイタニック

川が通り抜ける

「R」で始まる映画のタイトルを選択すると、次のように返されます。

王の帰還

川が通り抜ける

ロードハウス

(その他の欄は省略)

4

3 に答える 3

5

最も簡単な方法は、プログラムでクエリを次のようなものに拡張することです。

SELECT
...
WHERE
  title LIKE 'R%'
  OR title LIKE 'The R%'
  OR title LIKE 'A R%'
  OR title LIKE 'An R%'
  ...

これは、正規表現では使用できないインデックスを使用できるため、正規表現よりもパフォーマンスが向上するはずです。

ところで:これを行うための標準的な方法は、別のフィールドに記事を保存することです。

于 2013-01-25T08:29:38.580 に答える
2

この正規表現はあなたのニーズに合うはずです:

WHERE title REGEXP '^(The |An? )?R.*$'

しかし、@EugenRieck が気付いたように、おそらくtitle列にインデックスを使用するため、WHERE... OR...句を使用することをお勧めします。

于 2013-01-25T08:30:54.460 に答える
1

上記の提案 (どちらも同意します) に追加するには、並べ替えのために、CASE を使用して ORDER BY 句のフィールドを派生させる必要があるでしょう。

SELECT somefield, 
CASE 
WHEN title LIKE 'R%' THEN title
WHEN title LIKE 'The R%' THEN SUBSTRING(title FROM 5)
WHEN title LIKE 'A R%' THEN SUBSTRING(title FROM 3)
WHEN title LIKE 'An R%' THEN SUBSTRING(title FROM 4)
ELSE title
END AS SortTitle
FROM sometable
ORDER BY SortTitle
于 2013-01-25T09:32:43.603 に答える