2011-06-29 10 views
1

どのようにワード数でクエリを並べ替えることができますか?出来ますか?MySQL:ワード数で並べ替えた行を選択する

テーブルにテキストフィールドがある行があります。私はこれらのテキストフィールドの単語カウントでそれらを注文したい。

第二の問題は、私は例えば最小10ワード、または最大たぶん20

+0

本当にF( 'パンケーキハウスはどこですか?')が4を返すような関数 'F'を探していますか? –

+0

ええ、私はそれを探していましたが、私が今見ているように、良い回避策はありませんので、このフィールドに単語数のある別の列を追加する必要があります。 – Karol

答えて

4

まあ、これは非常によく、文字列の計算がすべて行に対して実行する必要があるため実行されません。

あなたがそうのようなMySQLの列に単語の数を数えることができます。SELECT SUM(LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))+1) FROM tableは(言葉は次のように定義されていれば「どんな区切りごとの空白」)今

、あなたのクエリにこれを追加します。

SELECT 
    <fields> 
FROM 
    <table> 
WHERE 
    <condition> 
ORDER BY SUM(LENGTH(<fieldWithWords>) - LENGTH(REPLACE(<fieldWithWords>, ' ', '')) + 1) 

あるいは、条件に追加します。

SELECT 
    <fields> 
FROM 
    <table> 
WHERE 
    SUM(LENGTH(<fieldWithWords>) - LENGTH(REPLACE(<fieldWithWords>, ' ', '')) + 1) BETWEEN 10 AND 20 
ORDER BY <something> 
+0

質問について質問してから、あなたの答えはOKです。もちろん、私は太文字列の計算のためにこのアプローチを使用しません。 – Karol

+0

'SUM'はまったく使用しないでください。単純に '' SELECT LENGTH(name)-LENGTH(REPLACE(name、 ''、 ''))+1を使用してください。 –

+0

私はOPが "テキストフィールド"プルアールを言っているのを見て、 fields単語数をまとめます。上記の例は私が混乱した理由である単一のフィールドを意味しています。したがって、上記のコメントを明確にするために、複数の列の合計単語数を確認するにはSUMが本当に必要です。 –

2

このような何か持っている唯一のこれらの行を選択する必要があること、である:

SELECT Field1, SUM(LENGTH(Field2) - LENGTH(REPLACE(Field2, ' ', ''))+1) 
AS cnt 
FROM tablename 
GROUP BY Field1 
ORDER BY cnt 

Field2を文字列フィールドでありますあなたが言葉を数えたいと思っています。

+0

それは動作する可能性があります - ありがとう、しかし、私は文字列の操作は、dbアダプタのための重いとすぐに挿入時に単語を数えることに気づいた。 – Karol

関連する問題