[英]Select from two tables with group by date
我有两张桌子:
表 t1:
id | date_click
1 | 2016-02-31 17:17:23
2 | 2016-03-31 12:11:21
3 | 2016-03-31 13:13:23
因此,我想从这张表中获取每天的计数字段Id
。
为此,我使用下一个查询:
SELECT date_format(date_click, '%Y-%m-%d') as date_click_event
, COUNT(id) as count_click
FROM t1
GROUP
BY date_click_event
ORDER
BY date_click_event DESC;
它的工作很好。
所以下一张桌子是t2。
id | count | date_sent
1 | 33 | 2016-02-31 11:12:23
2 | 22 | 2016-03-31 14:11:22
3 | 11 | 2016-03-31 13:12:13
要从该表中按日期选择数据,我使用下一个查询:
SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push
, SUM(count) as count_sent
FROM t2
GROUP
BY date_sent_push
ORDER
BY date_sent_push DESC
LIMIT 100;
它也很好用。 因此,我的目的是将这两个查询合并到一个SELECT
中,接下来我可以在 php 中编写一个表,其中包含表t1
中的Id
计数和表t2
中的count
字段计数。
当我尝试下一个查询时:
SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push
, SUM(t2.count) as count_sent
, COUNT(t1.id) as count_click
FROM t2
, t1
WHERE date_format(t2.date_sent, '%Y-%m-%d') = date_format(t1.date_click, '%Y-%m-%d')
GROUP
BY date_sent_push
ORDER
BY date_sent_push
DESC
LIMIT 100;
这行不通。 我做错了什么?
首先,您应该UNION这些结果,然后按天分组并选择聚合字段。 您也可以加入这些查询,但如果有两天在两个表之一中错过,则可能会出现问题:
SELECT date_sent_push,
MAX(count_click) as count_click,
MAX(count_sent) as count_sent
FROM
(SELECT date_format(date_click, '%Y-%m-%d') as date_sent_push
, COUNT(id) as count_click
, NULL as count_sent
FROM t1
GROUP BY date_sent_push
UNION ALL
SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push
, NULL as count_click
, SUM(count) as count_sent
FROM t2
GROUP
BY date_sent_push
) as t3
GROUP BY date_sent_push
use this code
(SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push, SUM(count) as count_sent FROM t2 GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100)
UNION
(SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push, SUM(t2.count) as count_sent, COUNT(t1.id) as count_click FROM t2, t1 WHERE date_format(t2.date_sent, '%Y-%m-%d')=date_format(t1.date_click, '%Y-%m-%d') GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100)
我正在阅读这个我最感兴趣的主题,但我一定在某个地方犯了错误
我有 2 张桌子:
我尝试混合 2 个这样的表:在此处输入图像描述。 实际上,一张桌子一切正常。 但是当我尝试与第二张桌子混合时没有工作。
需要帮助 谢谢
<!-- Timelime example --> <div class="row"> <div class="col-md-12"> <!-- The time line --> </div> <div class="timeline"> <?php session_start(); $username = isset($_SESSION['username']) ? $_SESSION['username'] : NULL; try { $bdd = new PDO('mysql:host=localhost;dbname=***;charset=utf8', '***', '***'); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // Everything work with 1 table like this : // $reponsem3 = $bdd->query("SELECT ta1, ta2, ta3, DATE_FORMAT(dateb, '%d %b') AS nndate, DATE_FORMAT(dateb, '%H h %i') AS nnheure FROM hta WHERE username='$username' ORDER BY dateb DESC LIMIT 0,30"); // but when i try mix both, it doesn't work $reponsem3 = $bdd->query("SELECT nndate, n1, n2, n3 FROM (SELECT ta1 AS n1, ta2 AS n2, ta3 AS n3, DATE_FORMAT(dateb, '%d %b') AS nndate, DATE_FORMAT(dateb, '%H h %i') AS nnheure FROM hta WHERE username='$username' GROUP BY date UNION ALL SELECT poids AS n1, taille AS n2, DATE_FORMAT(date_biometrie, '%d %b') AS nndate FROM biometrie WHERE username='$username' GROUP BY date_biometrie) ORDER BY nndate"); $nndate = ''; while ($donneesm3 = $reponsem3->fetch()) { if ($nndate != $donneesm3['nndate']){ ?> <!-- timeline time label MOIS PAIRE--> <?php echo "<div class='time-label'> <span class='bg-secondary'>".$donneesm3['nndate']."</span> </div>"; } ?> <!-- /.timeline-label --> <!-- timeline item RESULTAT AMT--> <div> <i class="fas fa-tachometer-alt bg-blue"></i> <div class="timeline-item"> <span class="time"><i class="fas fa-clock"></i> <?php echo ($donneesm3['nnheure']); ?> </span> <h3 class="timeline-header"> <div class="row"> <div class="col-8" align="center"> <td> </td> / <td> <?php echo $donneesm3['n2']; ?></td> <td><?php echo ($donneesm3['n3']); ?></td> </div> <div class="col-4" align="rigth"> <a class="btn btn-tool"><i class="fas fa-pencil-alt"></i> </a> <a class="btn btn-tool"><i class="fas fa-trash-alt"></i> </a> </div> </div> <div class="col-4" align="rigth"> <a class="btn btn-tool"><i class="fas fa-pencil-alt"></i> </a> <a class="btn btn-tool"><i class="fas fa-trash-alt"></i> </a> </div> </div> </h3> </div> </div> <?php $nndate = $donneesm3['nndate']; } $reponsem3->closeCursor(); ?> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.