我正在创建一个脚本,用于搜索数据库中的废弃购物车并将内容通过电子邮件发送给客户(产品名称、图像、数量等)。数据分布在许多表中,就获取信息和通过电子邮件发送信息而言——到目前为止一切都很好。但是,它会为客户放入购物车的每个产品发送一封电子邮件。因此,如果他们的购物车中有 5 件商品,它会发送 5 封电子邮件。我知道这是因为我的 join 和 while 语句,但我的 php/sql 知识不是很好。
所以我的问题是我应该使用哪个 join 或 union 声明,以便只向一个包含所有产品的客户发送一封电子邮件。
我读过的关于联接的教程总是有 1 个 id 或所有表之间通用的键,但是对于这个存储的数据库结构,一个表与另一个基于 1 个键的表相关,然后该表使用不同的键与另一个依赖表。
数据库结构如下所示。
ORDERS:
| orderid | ordstatus | ordqty | ordcustid |
|--------------|---------------|------------|--------------|
| 12637 | 0 | 1 | 0 |
| 12636 | 11 | 1 | 3531 |
| 12635 | 11 | 2 | 4192 |
ORDERPRODUCTS:
| ordprodname | ordprodqty | orderorderid | orderprodid |
|---------------|--------------|----------------|----------------|
| product1 | 1 | 12637 | 1206 |
| product2 | 1 | 12636 | 193 |
| product3 | 1 | 12635 | 1712 |
| product4 | 1 | 12635 | 1576 |
CUSTOMERS:
| customerid | customeremail | firstname |
|--------------|-------------------|-------------|
| 3531 | cust1@gmail.com | Customer1 |
| 4192 | cust2@gmail.com | Customer2 |
PRODUCTIMAGE:
| imageid | imageprodid | imagethumb |
|-----------|---------------|------------------|
| Product1 | 1206 | file/path/1.jpg |
| Product2 | 193 | file/path/2.jpg |
| Product3 | 1712 | file/path/3.jpg |
| Product4 | 1576 | file/path/4.jpg |
到目前为止,我的脚本如下所示:
mysql_select_db("cartmail", $con);
$result = mysql_query("SELECT *
FROM orders
, orderproducts
, productimage
, customers
WHERE orders.orderid = orderproducts.orderorderid
AND orderproducts.orderprodid = productimage.imageprodid
AND orders.ordcustid = customers.customerid
AND ordstatus = '11'
LIMIT 0 , 30");
while($row = mysql_fetch_array($result))
{
<My PHP mail script...>
}
mysql_close($con);