![](/img/trans.png)
[英]MySQL Update one table, but use data from two other tables as part of the update
[英]update two mysql tables with data from each
最初,我有一個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
分為圖像和視頻。
然后,我可以為每個表運行查詢。 是否有更好的方法可以解決這個問題,也許在一個查詢中?
我不知道完整的表格結構,所以這可能會或可能不會。 但是...為什么不使用一個名為“ media”(或任何您想要的表)的表,並添加一個索引的“ type”列。 然后,您可以讓您的表單具有一個帶有自動增量ID值的復選框,並且它們都對該表有效。 您可以通過單個查詢對兩個視頻/圖像進行更新查詢,而您的選擇僅需要WHERE中的其他條件,即“ type ='video'”或“ type ='image'”
無需在一個查詢中執行此操作。 我認為您不會因此獲得任何重大優勢。 我認為您要做的只是一個干凈,更高效的查詢。 使用兩個查詢從兩個表中刪除列表並不是一個壞設計。
這個相關問題可能會對您有所幫助。 MySql一次更新兩個表
更新查詢針對單個表運行,因此我認為您不能一次更新兩個表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.