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

如何用一个查询更新多行

  •  0
  • xRobot  · 技术社区  · 15 年前

    我使用PostgreSQL+PHP。

    假设我有这张桌子:

    Books ( id, title, year )
    

    以及这个php中的标题数组:

    $titles = array ("bible","kafka","Book of Eli");
    

    现在我要更新上面$titles数组中标题所在的所有行。

    所以我需要这样的查询:

    UPDATE books SET year = '2001-11-11' WHERE title is in $titles;
    

    一个查询是否可行?还是需要使用for循环?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Chad Birch    15 年前

    有可能,实际上你离得很近。

    对于SQL,语法如下:

    UPDATE books SET year = '2001-11-11' WHERE title IN ('bible','kafka','Book of Eli');
    

    要使用PHP生成它,您需要这样做:

    $query = "UPDATE books SET year = '2001-11-11' WHERE title IN ('" . implode("','", $titles) . "');'";
    

    PHP implode() 函数使用字符串将数组元素连接在一起,因此我将 ',' 在他们之间,有最初的和最后的 ' 手动放入字符串。

    请注意,如果任何标题包含撇号,则此操作当前将失败。如果这是一种可能性,你就需要逃离那些。

        2
  •  1
  •   Robert Durgin    15 年前

    你可以使用 implode() 函数,可以将数组转换为逗号分隔的字符串:

    $titles = array ("bible","kafka","Book of Eli");
    $comma_separated = implode(",", $array)
    $sql = "UPDATE books SET year = '2001-11-11' WHERE title is in (" . $comma_separated .")"
    
        3
  •  1
  •   Vidar Vestnes    15 年前

    怎么样

    $sql = "UPDATE books SET year = '2001-11-11' WHERE title in ('".implode("','",$titles)."')";