1

次のような放棄されたカートを見つけるためのクエリがあります。

SELECT   c.customerid, 
         c.custconfirstname, 
         c.custconemail, 
         o.ordstatus, 
         o.orddate, 
         GROUP_CONCAT(  'Order Id: ', orderid,  ' | Product name: ', ordprodname,  ' | Quantity: ', ordprodqty,  '<br>' ) AS ordered_items
 FROM    isc_customers c
         LEFT OUTER JOIN isc_orders o ON o.ordcustid = c.customerid
         LEFT OUTER JOIN isc_order_products op ON op.orderorderid = o.orderid
         LEFT OUTER JOIN isc_product_images pi ON pi.imageprodid = op.orderprodid
GROUP BY c.customerid
HAVING   COUNT( DISTINCT o.ordcustid ) >0
             AND o.ordstatus = 0
             AND o.orddate < UNIX_TIMESTAMP( ) -  '18000'
             AND o.orddate > UNIX_TIMESTAMP( ) -  '259200'

各顧客(一意のcustomerid)に対して、BLOBはordered_itemsに対して次のようなものを生成します。

 Order Id: 15256 | Product name: PROD A | Quantity: 1
,Order Id: 15256 | Product name: PROD B | Quantity: 1
,Order Id: 15299 | Product name: PROD A | Quantity: 1
,Order Id: 15301 | Product name: PROD A | Quantity: 1

これは基本的に、顧客が時間枠内に3台のカートを放棄したと解釈できます。このクエリは放棄されたカートの電子メールを送信するために使用されるため、上記の例の例を含め、さまざまな理由で、すべての放棄されたカートのすべての製品(一意のorderid)をスパムして電子メールで送信したくありません。商品Aを3回の注文で3回カートに入れると、メールで3回商品を受け取ることになります。

では、customeridごとに1つのorderidの結果のみを返すようにクエリを制限するにはどうすればよいですか?

4

1 に答える 1

0

クエリに DISTINCT を追加すると、それが実現します。

http://www.w3schools.com/sql/sql_distinct.asp

于 2012-05-24T01:25:14.047 に答える