放棄されたカートのデータベースを検索し、その内容 (製品名、画像、数量など) を顧客にメールで送信するスクリプトを作成しています。データは多くのテーブルに分散されており、情報を取得して電子メールで送信する限り、これまでのところ問題ありません。ただし、顧客がカートに入れた製品ごとに 1 つのメールを送信しています。したがって、カートに 5 つのアイテムがある場合、5 つのメールが送信されます。これは join と while ステートメントが原因であることはわかっていますが、私の php/sql の知識はあまりよくありません。
したがって、私の質問は、すべての製品を含む 1 人の顧客に 1 度だけ電子メールが送信されるように、どの join ステートメントまたは union ステートメントを使用する必要があるかということです。
結合について私が読んだチュートリアルには、すべてのテーブル間で共通の 1 つの ID またはキーが常にありますが、このストアのデータベース構造では、1 つのテーブルが 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);