0

以下のサンプル クエリでは、キーワードに一致するすべてのテキストを取得し、結果を年月ごとに分割しています。WHERE句を使用して各フィールドに対して検索するのではなく、すべての文字列の連結バージョンである「テキスト」で検索することを好みますが、HAVINGはデータを返しません。

SELECT 
date_format(created_date, '%Y-%m') as yr_mo,
count(id),
group_concat(coalesce(title,''),coalesce(story,'') SEPARATOR ' ') as text
from input_form
where dupe = 0 /*and story like '%flood%'*/
group by yr_mo
having text like '%flood%'
order by yr_mo

以下は、/** と '%flood%' **/ のようなストーリーのコメントを外し、HAVING 句を削除したときに返されるものです。

yr_mo   count(id)   text
2011-04 2   Floods Roads in my  community one time proved to b...
2011-05 21  THE TRUSTED LADY.   It was during my usual visits ...
2011-06 22  HEAVY RAINFALL On our village we were affected wit...
2011-07 52  FEED THE CHILDREN PROGRAMME(1) The world food prog...
2011-08 29  I was saved and helped to prosperI am one of the v...
2011-09 15  FLOODS In the past three months the country have f...
2011-10 19  FLOODFlood is a very bad disaster at the same time...
2011-11 9   RESPONDING TO DISASASTERUNICEF landed over relief ...
2011-12 3   EARLY PREVENTION OF FLOODShaving sensed the likeli...
2012-01 44  HUNGER STRIKE             In Wataalamu village the...
2012-04 8   THE FALLEN BRIDGEThe Kambu bridge along the Mombas...
2012-05 7   Increasing earth's natural environment awarenessAf...
2012-06 4   A misery solvedRecently 10 people died in my commu...
2012-07 21  Lsot HopesWhen the Agricultural Farmers Society ca...

私は、coalesce(story,'') で null を回避しようとしましたが、結果は同じでした。

編集#1:長くて厄介なクエリが機能することがわかり、必要なものを提供してくれました:

SELECT 
date_format(created_date, '%Y-%m') as yr_mo,
count(if( ( story like '%hunger%' OR title like '%hunger%' ) and (story_location_city like '%nairobi%' OR story_location_neighborhood like '%nairobi%'),id,null)) as 'hunger',
count(if( ( story like '%poverty%' OR title like '%poverty%' ) and (story_location_city like '%nairobi%' OR story_location_neighborhood like '%nairobi%'),id,null)) as 'poverty',
count(if( ( story like '%school%' OR title like '%school%' ) and (story_location_city like '%nairobi%' OR story_location_neighborhood like '%nairobi%'),id,null)) as 'school',
count(id) as total
from input_form
where dupe = 0
group by yr_mo
order by yr_mo

必要に応じて、if() ステートメント内の各フィールドを検索すると、特定の結果が得られます。これを行うより効率的な方法はありませんか?

4

1 に答える 1

2

GROUP_CONCATはその出力を (デフォルトで) 1024 文字に切り捨てます。そのため、HAVING節では文字列が連結テキストの最初の 1024 文字以内に出現する必要がありますflood、この節でWHEREは単に.input_form.story

切り捨てがなかったとしても一致するレコードがある月のすべてのGROUP_CONCATレコードが含まれるため、 +HAVINGは実際にはあなたが望むものではないと思います。たとえば、2012 年 4 月に 20 のレコードがあり、 が含まれているのは 10 だけである場合、+アプローチは (切り捨てがない場合) 2012 年 4 月に 20 の一致するレコードがあり、それらすべてのテキストを含むことを示します。floodGROUP_CONCATHAVING

于 2012-07-13T20:55:45.760 に答える