2016-04-07 2 views
0

「応答」という別個の列を持つ行を選択しようとしていますが、問題が発生しています。私のコードを見てみてください:mysql内の特定の列にのみ区別すること

select distinct input,response, 
((response REGEXP '[[:<:]]a[[:>:]]')+(response REGEXP '[[:<:]]have[[:>:]]')+(response REGEXP '[[:<:]]I[[:>:]]')) as wordsFound, 
(LENGTH(response) - LENGTH(REPLACE(response, ' ', ''))+1) AS wordsCount 
FROM allData 
HAVING wordsFound > 0 
order by wordsFound desc, wordsCount asc, rand() LIMIT 30 

私は、クエリで、列「入力」を削除した場合、それは動作しますが、私も列「入力」を選択します。代わりにanswerの隣にdistinctキーワードを置くと、代わりにエラーが表示されます。列の入力と個別の列の応答の両方を取得するにはどうすればよいですか?

+0

select distinct(response)、input ....?または、応答別にグループ化しますか? – Stuart

答えて

2

DISTINCTの代わりにGROUP BY句を使用します。

select input,response, 
((response REGEXP '[[:<:]]a[[:>:]]')+(response REGEXP '[[:<:]]have[[:>:]]')+(response REGEXP '[[:<:]]I[[:>:]]')) as wordsFound, 
(LENGTH(response) - LENGTH(REPLACE(response, ' ', ''))+1) AS wordsCount 
FROM allData 
GROUP BY response 
HAVING wordsFound > 0 
order by wordsFound desc, wordsCount asc, rand() LIMIT 30 
+0

これを使って別のデータベースに移動しなければならない場合は、MySQLがかなり独特の...実装されているので、これを書き直さなければならないことに注意してください。 –

+0

非常に真です。 'GROUP BY'と' DISTINCT'も遅いです。このクエリは、おそらくそれを行うより良い方法が、彼の全体のスキーマを示唆することなく、提案をすることは難しいと私に言います。 – Cfreak

+0

/合意しました。追加の文字= P –

関連する問題