0

最初我有一个 mysql 视频表,它在一个简单的 html 表中显示给用户。他们可以$video_list通过查询选择一个或多个复选框 ( ) 来标记删除(实际上并不删除,而是更新记录)

//store all video names in array
    foreach ($video_list as $element) {
        $deleteNames[] = $db->quote($element);
    }

//create nice comma separated list for query
$deleteNames = implode(',', $deleteNames);

// query used
$query_delete_video = sprintf('UPDATE `videos` SET deleted_datetime=NOW() WHERE `video_name` IN (%s)', $deleteNames);

现在的问题是这个 html 表现在也有图像,而不仅仅是视频。这些图像位于一个名为images. 用户可以同时选择多个视频或图像或仅视频或仅图像全部删除。

因此,现在该列表$deleteNames可能包含视频和图像名称。

仅对图像的查询如下所示:

$query_delete_image = sprintf('UPDATE `images` SET deleted_datetime=NOW() WHERE `image_name` IN (%s)', $deleteNames);

相同的东西只是在不同的表和不同的列名中。我能想到有这两个查询的唯一方法是我$deleteNames可能通过解析扩展名或其他东西来分离成图像和视频。

然后我可以为每个表运行查询。有没有更好的方法来解决这个问题,也许在一个查询中?

4

2 回答 2

0

我不知道完整的表结构,所以这可能会也可能不会。但是......为什么不使用一个名为“媒体”的表(或任何你想要的),并添加一个被索引的“类型”列。然后,您可以让您的表单有一个带有自动增量 id 值的复选框,它们都对该表有效。您可以使用单个查询对视频/图像进行更新查询,并且您的选择只需要 WHERE 中的附加条件,用于“type='video'”或“type='image'”

于 2013-07-06T01:36:56.663 回答
0

无需在一个查询中执行此操作。我认为您不会因此获得任何显着优势。我认为您要做的只是一个干净、更有效的查询。有两个查询从两个表中删除列表并不是一个糟糕的设计。

这个相关的问题可能会对您有所帮助。MySql 一次更新两个表

更新查询针对单个表运行,因此我认为您不能一次更新两个表。

于 2013-07-06T01:45:21.637 回答