如何根据查询更新重复的mySQL记录

时间:2015-03-25 19:07:53

标签: php mysql

我有2个名为db_cartsdb_carts_items的表。

问题在于它们可能有sc_idseller_id不同。

我正在尝试获取具有重复项的内容(我使用下面的查询实现),然后我需要更新重复的内容,以便对于每个不同的seller_idsc_id是相同的(如果可能的话,匹配的最高值。

我如何实现这一目标,最好是在mySQL或PHP中?

以下是查询:

SELECT * FROM db_carts 
LEFT JOIN db_carts_items ON db_carts.sc_id=db_carts_items.sc_id
WHERE buyer_id="123456"
AND seller_id IN 
    ( SELECT seller_id
      FROM db_carts 
      WHERE buyer_id="123456"
      GROUP BY seller_id having (count(*) > 1)
    )

这给了我一个输出:

sc_id    |    seller_id    |    buyer_id    |
=============================================
15             50                123456
18             50                123456
23             70                123456
45             70                123456

我需要它来更新db_carts_items,使其看起来像:

sc_id    |    seller_id    |    buyer_id    |
=============================================
18             50                123456
18             50                123456
45             70                123456
45             70                123456

这有可能来自mySQL吗?如果没有,在PHP?

我基本上需要根据每个重复项的输出更新sc_id表中的db_carts_items值。

1 个答案:

答案 0 :(得分:2)

这样的事情可以解决问题:

with duplicates as (SELECT seller_id, max(sc_id) as maximum 
FROM db_carts 
WHERE buyer_id='123456'
GROUP BY seller_id
HAVING count(*)>1)
UPDATE db_carts, db_carts_items 
set db_carts.sc_id=duplicates.maximum, 
db_carts_items.sc_id=duplicates.maximum
FROM db_carts, db_carts_items, duplicates
WHERE db_carts.buyer_id='123456'
AND db_carts.seller_id=db_carts_items.seller_id 
AND db_carts.seller_id=duplicates.seller_id;

编辑:您似乎无法在更新语句中使用。在这种情况下,我会用PHP做。 首先获取seller_id及其最大值

"SELECT seller_id, max(sc_id) as maximum 
FROM db_carts 
WHERE buyer_id='123456'
GROUP BY seller_id
HAVING count(*)>1"

然后为每个返回的行进行类似的更新

"UPDATE db_carts, db_carts_items 
set db_carts.sc_id=".$row['maximum'].", 
db_carts_items.sc_id=".$row['maximum'].
"FROM db_carts, db_carts_items
WHERE db_carts.buyer_id='123456'
AND db_carts.seller_id=db_carts_items.seller_id 
AND db_carts.seller_id=".$row['seller_id']