最初我有一个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
分成图像和视频。
然后我可以为每个表运行查询。有没有更好的方法来解决这个问题,可能是在一个查询中?
答案 0 :(得分:0)
我不知道全表结构,所以这可能会也可能不会。但是......为什么不使用一个名为“media”(或任何你想要的)的表,并添加一个索引的“type”列。然后,您可以让表单有一个带有自动增量ID值的复选框,它们对该表都有效。您可以使用单个查询对两个视频/图像执行更新查询,并且您的选择只需要WHERE中的附加条件,对于“type ='video'”或“type ='image'”
答案 1 :(得分:0)
在一个查询中无需执行此操作。我认为你没有任何明显的优势。我想你想做的只是一个干净,更有效的查询。有两个查询从两个表中删除列表并不是一个糟糕的设计。
这个相关问题可能对你有所帮助。 MySql update two tables at once
更新查询针对单个表运行,因此我认为您不能一次更新两个表。