2012-01-09 9 views
0

私はブラケットORDER BY/GROUP BYを使用して式を無視するにはどうすればよいですか?私はORDER BYまたはGROUP BYを使用している場合

 X 

aaabbbccc[0]aaabbbccc 
aaabbbccc[15]aaabbbccc 
aaabbbccc[11]eeefffggg 
aaabbbccc[10]eeefffggg 
aaabbbccc[17]aaabbbccc 
aaabbbccc[19]eeefffggg 

として、

 X 

aaabbbccc[0]aaabbbccc 
aaabbbccc[15]aaabbbccc 
aaabbbccc[17]aaabbbccc 
aaabbbccc[10]eeefffggg 
aaabbbccc[11]eeefffggg 
aaabbbccc[19]eeefffggg 

の内側にあるものを無視して、列Xを言って、一緒にグループに必要しかし、私はいつものように、以下の取得します。

aaabbbccc[0]aaabbbccc 
aaabbbccc[10]eeefffggg 
aaabbbccc[11]eeefffggg 
aaabbbccc[15]aaabbbccc 
aaabbbccc[17]aaabbbccc 
aaabbbccc[19]eeefffggg 

誰でもこのシナリオをどのように克服できますか。

ありがとうございました。

+0

実際の行をいくつか追加してください。実際のSQLはWHERE句を使用する行を除外します。 –

+0

ORDER BYまたはGROUP BYを使用しますか?これらは全く異なることをします! (あなたの望む出力から 'ORDER BY'が必要なように見えます) –

答えて

1

あなた、得られた値のグループ/注文することができ、これはパフォーマンスが大きなテーブルの上に最悪となりますので、インデックスを使用して排除するのに:

SELECT ... 
... 
GROUP BY CONCAT(
    LEFT(yourfield, LOCATE('[', yourfield)), 
    RIGHT(yourfield, LENGTH(yourfield) - LOCATE(']', yourfield)) 
); 

注:はちょうど私の頭の上をオフに行くので、この最もおそらくうまくいかないかもしれませんが、あなたに仕事の基礎を与えるべきです。それがうまくいくとすれば、文字列を2つの部分に分割します。[の前と]の後に、これら2つの部分をまとめてグループ化し、[...]の部分を効果的に削除します。

この種のことを定期的に行っている場合は、このフィールドを2つの別々のフィールドに分割することをお勧めします。簡単にインデックス化してグループ化/並べ替えできる「前」フィールドと「後」フィールドを専用/この醜い怪物よりも。

+0

ありがとう。私はこのアイデアを得て、それを機能させようとしています。それが動作する場合、結果を投稿します。 – ppoudel

+0

RIGHT()とLOCATE()を使って下部をトリミングし、ヒントとして一時テーブルに格納することができました。その後、私の問題を解決するためにORDER BYをしました。このアイデアに感謝します。 – ppoudel

関連する問題