【问题标题】:Select Between Two Dates and from Two Tables in PHP and MySQL在 PHP 和 MySQL 中选择两个日期和两个表
【发布时间】:2021-12-06 07:18:07
【问题描述】:

请我在下面这个查询的正确查询方面需要帮助...

SELECT 
    compute_num, 
    SUM(`shar_cr`) AS shar, 
    SUM(`thri_cr`) AS thri, 
    SUM(`vol_cr`) AS volun 
FROM `member_transacting` 
    WHERE date BETWEEN '$from_date' AND '$end_date' 
RIGHT JOIN regist_members ON member_transacting.compute_num=regist_members.m_compute_num 
ORDER BY date DESC

基本上,我想选择两个日期之间数据库表中的值的总和。同时,我还想使用他们的通用标识符从注册成员表中获取相同的用户信息,在本例中是他们的计算机号码。

预期结果

我希望能够从 member_transacting 表中获取值的总和,并从 regist_members 表中获取成员姓名和电话号码。

我已经在 phpmyadmin 上尝试了上述查询,但没有成功。相反,它抛出了错误,即查询错误。请帮忙。

到目前为止我的进步 以下来自 Abronsius 教授指南的代码对我有用

我只需要通过添加 GROUP BY 来调整它,并从 regist_members 表中请求特定字段(full_name)

    SELECT t.compute_num,
        m.full_name,     
        SUM( t.`shar_cr`) AS shar, 
        SUM( t.`thri_cr`) AS thri,
        SUM( t.`vol_cr`) AS volun
        FROM `member_trans` t
    JOIN `regist_members` m ON t.`compute_num`=m.`m_computer_no`
    WHERE t.`date` BETWEEN '$from_date' AND '$end_date' 
    GROUP BY t.`compute_num` 
    ORDER BY t.`date` DESC

尽管上面的代码已经为我提供了我想要的大约 90% 的内容,但我还不能将其发布为答案,因为我仍然需要一些帮助才能使其完美。

我需要的帮助

当然,上面的代码运行良好;它从两个表中获取所需的结果;但如果我一次从 regist_members 表中请求多个数据(例如 m.full_name、m.member_bank_name),它就不起作用。只有当我保留上面的代码时它才有效。它不允许我请求比上述代码中更多的数据。请有人指导。

【问题讨论】:

  • join 应该放在 where 子句之前,您会发现使用表 aliases 比在连接条件中使用表名更容易(?)
  • @ProfessorAbronsius 你能和我分享一下正确的结构吗?
  • @ProfessorAbronsius 让我试着回复你
  • 请提供您的表格结构、示例数据和所需结果minimal reproducible example
  • 表是两张,数据很多,能指导我如何提供表结构吗?

标签: php mysql select


【解决方案1】:

我认为你需要GROUP BY

SELECT 
    `member_transacting`.`compute_num`, 
    SUM(`shar_cr`) AS shar, 
    SUM(`thri_cr`) AS thri, 
    SUM(`vol_cr`)  AS volun 
FROM `member_transacting` 
JOIN `regist_members`
    ON `member_transacting`.`compute_num` = `regist_members`.`m_compute_num` 
WHERE `date` BETWEEN '$from_date' AND '$end_date' 
GROUP BY `member_transacting`.`compute_num`
ORDER BY `member_transacting`.`compute_num` DESC;

【讨论】:

  • MySQL 为 WHERE 子句抛出错误。当我测试您的查询时,它说 WHERE 子句是意外的。
  • 你说得对。对不起。修正了我的答案。看这里:sqlize.online/…
【解决方案2】:

最后我能够通过下面的代码得到我想要的结果...

           SELECT t.compute_num,
                        m.full_name,     
                        SUM( t.`shar_cr`) AS shar, 
                    SUM( t.`thri_cr`) AS thri,
                    SUM( t.`vol_cr`) AS volun,
                     m.member_bank AS bank_name,
                     m.member_account AS account_no
                    FROM `member_trans` t
                JOIN `regist_members` m ON t.`compute_num`=m.`m_computer_no`
                WHERE t.`date` BETWEEN '$from_date' AND '$end_date' GROUP BY t.`compute_num` ORDER BY t.`date` DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2015-06-13
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多