【问题标题】:Send mail to users with unpaid orders php向未付订单的用户发送邮件php
【发布时间】:2016-07-05 07:03:41
【问题描述】:

我有一个自定义的 php 电子商务网站。

其中我有两个名为 order 和 users 的表。

现在我需要向订单状态为 0 的用户发送电子邮件。

用户 ID 存储在 users 表中。

这是我的 php 代码:

<?php
   $query = mysqli_query($link, "SELECT * FROM dg_order WHERE state=0");
    while ($row   = mysqli_fetch_assoc($query)) {
        $uid   = $row['uid'];
        $users = mysqli_query($link, "SELECT * FROM dg_users WHERE uid='$uid'");
        while ($rw    = mysqli_fetch_assoc($users)) {
            $em = $rw['email'];

            mail($em, $subject, $message, $headers);
        }
    }

但它会根据未付款订单的数量多次向一位用户发送电子邮件。我如何向只有一次未付款订单的人发送电子邮件,以及如何在电子邮件中发送未付款订单列表?

【问题讨论】:

  • 首先,请参阅 JOIN。如果您仍在苦苦挣扎,请考虑提供适当的 CREATE 和 INSERT 语句 TOGETHER 以获得所需的结果。
  • 请看这里stackoverflow.com/questions/5706437/…。关于加入表
  • 仅供参考,我知道加入但找不到实现这一目标的方法!
  • 你肯定不知道joins。
  • 你,如果你知道,你能给我实现这个的代码吗?

标签: php mysql


【解决方案1】:

请注意,这只会向每个用户发送一封电子邮件,无论他们可能有多少未完成的订单...

 $query = "
  SELECT DISTINCT u.email
             FROM dg_order o
             JOIN dg_users u
               ON u.uid = o.uid
            WHERE o.state = 0;
            ";

 $result = mysqli_query($link,$query);

    while($row = mysqli_fetch_assoc($result))
    {
        $em = $row['email'];
        mail($em, $subject, $message, $headers);
    }

【讨论】:

    【解决方案2】:

    您可以使用INDISTINCT 修改您的代码

    $users = mysqli_query($link, "SELECT email FROM dg_users WHERE uid IN(SELECT DISTINCT uid FROM dg_order WHERE state=0)");
    while ($rw = mysqli_fetch_assoc($users)) {
        $em = $rw['email'];
        mail($em, $subject, $message, $headers);
    }
    

    【讨论】:

    • 但可能效率低下
    • 是的,连接比IN查询效率最高
    • WHERE uid IN(SELECT 不是低效的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2016-03-17
    相关资源
    最近更新 更多