代码之家  ›  专栏  ›  技术社区  ›  ltdev

MySQL高级UPDATE查询

  •  1
  • ltdev  · 技术社区  · 13 年前

    我想设置一张图片作为专辑的封面,我通过从一个在做循环中的无线电输入中选择它来实现这一点。我在images表中放入了一个名为is_cover的字段,如果图像被设置为cover,则取1,否则取0。

    <input type="radio" name="cover" value="<?php echo $row_images['image_id']; ?>" <?php if($row_images['is_cover'] == 1){ echo "checked=\"checked\""; } ?> />
    

    我的问题是,如何执行更新查询,将所有图像is_cover字段设置为0,并且只有所选图像的值为1。

    我想说的是,我如何才能做到这一点:

    $is_cover = $_POST['cover'];
    $query = "
        UPDATE images 
        SET is_cover = 1 
        WHERE image_id = {$is_cover} 
              AND SET is_cover = 0 
        WHERE image_id <> {$is_cover}
    ";
    
    3 回复  |  直到 13 年前
        1
  •  4
  •   Fluffeh    13 年前

    这应该对你有用:

    UPDATE images SET is_cover = CASE WHEN image_id = {$is_cover} THEN 1 ELSE 0 END;
    

    根据我的测试:

    mysql> select * from first;
    +------+-------+
    | id   | title |
    +------+-------+
    |    1 | aaaa  |
    |    2 | bbbb  |
    |    3 | cccc  |
    |    4 | NULL  |
    |    6 | ffff  |
    +------+-------+
    5 rows in set (0.01 sec)
    
    mysql> update first set title = case when id > 4 then 'gggg' else title end;
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 5  Changed: 1  Warnings: 0
    
    mysql> select * from first;
    +------+-------+
    | id   | title |
    +------+-------+
    |    1 | aaaa  |
    |    2 | bbbb  |
    |    3 | cccc  |
    |    4 | NULL  |
    |    6 | gggg  |
    +------+-------+
    5 rows in set (0.00 sec)
    
        2
  •  0
  •   techie_28    13 年前

    您可以在此处运行2个查询,其中一个将其全部设置为0,然后将所选查询设置为1

        3
  •  0
  •   Jocelyn    13 年前

    执行以下2个查询:

    $query = "UPDATE images SET is_cover = 0 WHERE image_id <> {$is_cover}";
    
    $query = "UPDATE images SET is_cover = 1 WHERE image_id = {$is_cover}";
    

    第一个查询设置所有 is_cover 至零。第二个查询集 is_覆盖 对于所选图像,设置为1。