mysql - 按 id 更新最近更新的行

标签 mysql sql database phpmyadmin prestashop

在我的 prestashop 数据库中,当该产品的数量为 0 时,我尝试更新默认产品属性。我检查 quantity 是否为 0,然后将 default_on 设置为 null。然后,仅当 quantity 大于 0 时,我才尝试使用相同的 id_product 设置另一个属性 default_on。 p>

我有 3 个问题:

  1. 如何检查特定 id_product 是否只有 1 个结果?如果只有 1 个,我不想更新 default_on。
  2. 如何检查特定 id_product 的所有结果的数量 = 0?在这种情况下我也不想更新 default_on。
  3. 如何为所有表制作这个?循环?
START TRANSACTION;
SET @update_id := 0;
UPDATE ps_product_attribute SET default_on = NULL, id_product = (SELECT @update_id := id_product)
WHERE `default_on` = 1 AND `quantity` = 0
LIMIT 1;

UPDATE ps_product_attribute SET default_on = 1
WHERE `id_product` = @update_id AND `quantity` > 0 AND `default_on` IS NULL
LIMIT 1;
COMMIT;

最佳答案

使用自联接来获取具有多个结果的所有产品。

UPDATE ps_product_attribute AS t1
JOIN (
    SELECT id_product
    FROM ps_product_attribute
    GROUP BY id_product
    HAVING COUNT(*) > 1
) AS t2 ON t1.id_product = t2.id_product
SET default_on = CASE
    WHEN default_on = 1 AND quantity = 0 THEN NULL
    WHEN quantity > 0 AND default_on IS NULL THEN 1
    ELSE default_on -- leave the rest unchanged
END

关于mysql - 按 id 更新最近更新的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57499589/

相关文章:

database - 将多个在线销售点数据保存到单个销售点的最佳方法

mysql - 有什么方法可以将 MySQL 中的数据与 Firebase 同步吗?

python - SQLAlchemy:选择多个表

sql - 具有许多公用表表达式的 Postgresql View 速度很慢

php - 如何多次更新一个字段?

sql - 一张数据库表海量请求最优解

php - Mysql 获取每年每个月的行数

java - mysql for java中的语句

sql - 获取 Postgres 上每个重复项的最新条目

database - 搜索数据库现有记录问题