0

ユーザーがログインする前にカートにアイテムを入れてアカウントにログインしたときに実行される次の更新クエリがあります(テーブルに設定された一時的なアカウント)...

UPDATE cart_items SET account_id=$account WHERE account_id=$cookieId;

これにより、次のような重複した結果が作成されることがあります。

id | account_id | itemNumber | itemQuantity
------------------------------------------
20 | 10         | 6          | 2
25 | 10         | 6          | 1

私がやりたいことは、これらの重複レコードの作成を回避し、次のような単一のレコードを残すクエリを作成することです。

id | account_id | itemNumber | itemQuantity
------------------------------------------
20 | 10         | 6          | 3

DUPLICATE KEY UPDATE使用することは私が探しているものかもしれないと思いますが、頭を悩ませることはできません。誰でも私を助けてもらえますか?

4

2 に答える 2

0

OK、これが私がやったことです...少し長くなるかもしれませんが、うまくいきます...

UPDATE cart_items SET account_id=$account WHERE account_id=$cookieId;

UPDATE cart_items t
  JOIN (
    SELECT MinID, b.itemQuantity LatestName
    FROM cart_items b
    JOIN (
      SELECT MIN(id) MinID, MAX(id) MaxID
      FROM cart_items
      GROUP BY account_id, itemNumber
      HAVING COUNT(*) > 1
    ) g ON b.id = g.MaxID
  ) rs ON t.id = rs.MinID
SET t.itemQuantity = t.itemQuantity+LatestName;

DELETE `cart_items` 
FROM `cart_items`
LEFT OUTER JOIN (
   SELECT MIN(`id`) as `id`, `account_id`, `itemNumber`
   FROM `cart_items` 
   GROUP BY `account_id`, `itemNumber`
) as `KeepRows` ON
   `cart_items`.`id` = `KeepRows`.`id`
WHERE
   `KeepRows`.`id` IS NULL
于 2013-06-21T12:06:01.000 に答える