【问题标题】:Turn multiple repetitive MySQL queries into one?将多个重复的 MySQL 查询合二为一?
【发布时间】:2012-07-02 23:12:39
【问题描述】:
UPDATE some_table set rank=1 WHERE id=25
UPDATE some_table set rank=2 WHERE id=15
UPDATE some_table set rank=3 WHERE id=10
UPDATE some_table set rank=4 WHERE id=12
UPDATE some_table set rank=5 WHERE id=13
UPDATE some_table set rank=6 WHERE id=14
UPDATE some_table set rank=7 WHERE id=11

我怎么能把它变成一个单一的查询,因为我想不出一个? id 的这些值是按顺序排列的。想想一个有图像的照片库,用户可以选择重新排列这些图像的顺序。后端将根据用户定义的顺序分配排名,并将在 ORDER BY 子句中使用。

【问题讨论】:

  • 您想通过将它们放在一个查询中来解决什么问题?

标签: mysql optimization sql-order-by


【解决方案1】:
update some_table 
set rank = case 
    when id = 25 then 1 
    when id = 15 then 2
    when id = 10 then 3 
    when id = 12 then 4
    when id = 13 then 5 
    when id = 14 then 6 
    when id = 11 then 7 
end

【讨论】:

    【解决方案2】:

    您可以使用案例结构...类似于此..

    CASE id1
        WHEN id = 25 THEN UPDATE some_table SET rank = 1
    ELSE
        WHEN id = 15 THEN UPDATE some_table SET rank = 2
    ELSE
        etc...
    END CASE
    

    参考:

    DELIMITER |
    
    CREATE PROCEDURE p()
    BEGIN
    DECLARE v INT DEFAULT 1;
    
    CASE v
      WHEN 2 THEN SELECT v;
      WHEN 3 THEN SELECT 0;
      ELSE
        BEGIN
        END;
    END CASE;
    END;
    |
    

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多