2017-08-19 13 views
1

次のクエリは、いくつかの行を返します。各行には、それぞれ独自のdate_createdがあります。mySQLまたはPHPのいずれかの日付に基づいて出力行をグループ化する方法はありますか?

SELECT * 
FROM table1 l 
     inner join table2 d 
       ON d.id = l.id 
WHERE l.company_id = 1 

UNION ALL 

SELECT * 
FROM table1 l 
     inner join table3 p 
       ON p.id = l.id 
WHERE p.company_id = 1 

サンプル出力:

company_id ---- user_id ---- text ---- dateAndTime 
1   ---- abc ---- hi ---- 2017-08-17 22:26:18 
1   ---- def ---- hey ---- 2017-08-08 11:57:26 
1   ---- abc ---- hi ---- 2017-08-08 11:55:40 
1   ---- ghz ---- sup ---- 2017-07-25 16:01:34 

私が達成したいこと:

私は、これらすべてのデータを表示するには、PHPのforeachループを実行しています。しかし、各日付の変更時に、私は日付を表示したいと思う(それらをデザインに基づいてグルーピングするように)。

だから、(表示上の)出力

2017-08-17 
    1   ---- abc ---- hi ---- 2017-08-17 22:26:18 
2017-08-08 
    1   ---- def ---- hey ---- 2017-08-08 11:57:26 
    1   ---- abc ---- hi ---- 2017-08-08 11:55:40 
2017-07-25 
    1   ---- ghz ---- sup ---- 2017-07-25 16:01:34 

は、どのように私はどちらかMySQLやPHPでこれを達成することができますか?

+1

クエリで 'ORDER BY DATE(dateAndTime)'を使用します。残りの部分をPHPで処理します。 PHPコードはまだ書いてありますか? –

+0

@TimBiegeleisen私は正直言ってこの注文をしていますが、PHPの部分は欠けています。私がしようとしていた一つのアイデアは、foreachループから '前の日付 'を保存することですが、論理的に立つことはできません。少なくとも私の心の中で。 – EnexoOnoma

+0

[非常に単純なSQLクエリであると思われるものに対してMCVEを提供する理由(http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for)非常にシンプルなSQLクエリ) – Strawberry

答えて

0

ストア変数の最後の日は、各反復でチェック:

$q = "SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM table1 l inner join table2 d ON d.id = l.id WHERE l.company_id = 1 UNION ALL SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM table1 l inner join table3 p ON p.id = l.id WHERE p.company_id = 1"; 
// ... 
$lastGroupDate = null; 
foreach ($row as $company) { 
    if ($lastGroupDate !== $company["date"]) { 
     echo $company["date"]."<br>"; 
    } 
    echo $company["user_id"]."<br>"; 
    // rest of fields 
    $lastGroupDate = $company["date"]; 
} 

は、クエリにdateAndTimeのことで結果をソートすることを忘れないでください。

重要:クエリーにDATE(dateAndTime) as dateを入力する必要があります。これは、日付ではなく時間でグループ化する必要があるためです。

+0

ありがとう – EnexoOnoma

関連する問題