我有2个名为db_carts
和db_carts_items
的表。
问题在于它们可能有sc_id
但seller_id
不同。
我正在尝试获取具有重复项的内容(我使用下面的查询实现),然后我需要更新重复的内容,以便对于每个不同的seller_id
,sc_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
值。
答案 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']