我的数据库中有一个名为posts
的表,其中包含一个名为has_read
的列。然后,我有一系列的帖子ID,如下所示:
$posts = array(1, 5, 29, 38, 50, 51, 52, 65, 79);
我想要做的是对于阵列中的所有帖子,更新他们的行以将用户ID添加到has_read
。我无法使用foreach循环,因为它会执行9个查询,我认为这些查询过多。
答案 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)
将Where
与IN
$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)) . ');';