使用单个查询更新多行

时间:2013-12-13 10:54:04

标签: php mysql sql database

我的数据库中有一个名为posts的表,其中包含一个名为has_read的列。然后,我有一系列的帖子ID,如下所示:

$posts = array(1, 5, 29, 38, 50, 51, 52, 65, 79);

我想要做的是对于阵列中的所有帖子,更新他们的行以将用户ID添加到has_read。我无法使用foreach循环,因为它会执行9个查询,我认为这些查询过​​多。

6 个答案:

答案 0 :(得分:2)

$updatestring = implode(",",$posts = array(1, 5, 29, 38, 50, 51, 52, 65, 79))

$sql = "UPDATE post SET has_read=1 WHERE userID IN($updatestring)";

将您的id数组转换为以逗号分隔的字符串,并使用IN()函数进行批量更新

虽然实际上正在考虑这一点,但这是完全错误的做法。由于它是一个线程到多个用户关系,因此最好为此设置一个规范化数据库,并使用一个单独的表来跟踪基于用户ID和线程ID的读取。

答案 1 :(得分:0)

您可以使用WHERE IN这样的语句:

$result = mysql_query('UPDATE table SET field = value WHERE id IN ('.implode(',',$posts).')');

答案 2 :(得分:0)

您可以使用IN。

$sql = "UPDATE posts 
        SET has_read = has_read + " . $user_id . "
        WHERE id IN (" . implode(",", $posts) . ")";

当然,您不应该这样做,而是准备一个语句并将$ user_id作为参数传递,具体取决于您使用的数据库库。

答案 3 :(得分:0)

WhereIN

一起使用
$result = mysql_query('UPDATE posts SET has_read= user_id
WHERE id IN ('.implode(',',$posts).')');

答案 4 :(得分:0)

如下:

UPDATE posts_table SET has_read = 1 WHERE id IN (1, 5, 29, 38, 50, 51, 52, 65, 79);

答案 5 :(得分:0)

试试这个:

$query = 'UPDATE posts SET has_head = 1 WHERE id IN (' . implode(',', array_map('intval', $array)) . ');';