2017-05-28 10 views
0

の値によってチャンクが、私はこのようなデータを返す簡単な生のSQLクエリを持っている:グループ化とMySQL

SELECT 
    a.id, count(ah.id) as count 
FROM 
    `table_name_one` as a 
JOIN 
    `table_name_two` as ah 
ON 
    a.id=ah.answer_id 
WHERE 
    a.user_id = 7178 
    AND a.created_at BETWEEN '2017-05-01' AND '2017-05-28' 
GROUP BY a.id 

enter image description here

私はグループに二つのグループによって、この結果が欲しいです。 グループ1にはrevisionCount == 1、グループ2に残りのデータが含まれます。私はループを使用してこれを行うことができますが、私はSQLクエリでこれを行うことができればそれは私には良いでしょう。

ここから誰でも助けてくれますか?

+0

はあなたを助けることができるリンクです役立ちます。 https://stackoverflow.com/questions/8610907/group-by-except-for-valueue – DevelopmentIsMyPassion

+0

変更のみ** GROUP BY a.id **をGROUP BY(revisionCount = 1)desc、a.id ** –

答えて

1

あなたが値の2セットのリストを作成したい場合は、1つのクエリでそれを行うことができます。

SELECT GROUP_CONCAT(CASE WHEN cnt = 1 THEN id END) as id_1s, 
     GROUP_CONCAT(CASE WHEN cnt > 1 THEN id END) as id_2plus 
FROM (SELECT a.id, count(ah.id) as cnt 
     FROM `table_name_one` a JOIN 
      `table_name_two` as ah 
      ON a.id = ah.answer_id 
     WHERE a.user_id = 7178 AND 
      a.created_at BETWEEN '2017-05-01' AND '2017-05-28' 
     GROUP BY a.id 
    ) a; 

これは、カンマ区切りのリストに値を入れます。デフォルトではMySQLは長さを1,024文字に制限しています。リストが長ければ、クエリを2回実行してそれぞれを生成することができます。 。 。 cntで注文し、戻り値を読み取っているときに値を確認してください。

+0

はい、コンマ区切りのリストを返します。 2 [▼ 0 => { 0 => { + "ID":171437 + "revisionCount":1 }、 1 => { + "ID" 私はこのフォーマット アレイのようなデータが必要:171437 + "revisionCount":1 } 1 => {#671▼ + "ID":172759 + "revisionCount":2 } .....] おかげ – Minhajul

0

これを達成するためにhaving節を使用できます。 havingの詳細については、オンラインで読むことをお勧めします。クエリ以下

丁度1としてカウントはあなたにすべてのレコードを与える:

SELECT 
    a.id, count(ah.id) as count 
FROM 
    `table_name_one` as a 
JOIN 
    `table_name_two` as ah 
ON 
    a.id=ah.answer_id 
WHERE 
    a.user_id = 7178 
    AND a.created_at BETWEEN '2017-05-01' AND '2017-05-28' 
GROUP BY a.id 
HAVING count(ah.id) = 1 

あなたが第2のセットを得るために、上記のクエリである条件を微調整することができます。

+0

これはcount == 1のデータを返します。しかし、私は2つの配列のすべてのデータを必要とします。 – Minhajul

+0

これを同じクエリで使用するには、 'CASE WHEN'節を使用してそれを達成することができます。 –

+0

@Minhajulあなたは私が与えたリンクを試してみましたか? – DevelopmentIsMyPassion

0

2つの結果セットがPHPの配列として必要であると仮定します。そのためには2つのクエリをセミコロンで区切って記述する必要があります。

Query 1 where revision count =1; 
Query 2 where revision count >1; 

希望は、これはここで