[英]MySQL INNER JOIN 3 tables and also DELETE using INNER JOIN
我真的很忙於此任務,因此非常感謝您的幫助或指導。
表格:
module_uploads
+--------------------------+
| upload_id | upload_name |
+--------------------------+
| 1006 | 12.png |
| 1007 | 18.png |
+--------------------------+
module_timelimit
+------------------------------------------------+
| upload_id | email | expires |
+------------------------------------------------+
| 1006 | me@me.com | 2014-05-22 16:34:54 |
| 1007 | me12@me.com | 2015-05-20 20:34:54 |
+------------------------------------------------+
module_fieldvals
-----------------------------------------+
| upload_id | fld_id | value |
-----------------------------------------+
| 1006 | 2 | me@me.com |
| 1006 | 0 | mcdda8fbr |
| 1007 | 0 | mcdda8fbr |
| 1007 | 2 | me12@me.com |
-----------------------------------------+
好的,我想根據已過期的upload_id加入3個表,刪除文件,發送電子郵件,然后刪除所有數據。 我有2個問題:
到目前為止,這是我的代碼:
$database = cmsms()->getDb();
$now = $database->DbTimeStamp(time());
$query = "
SELECT
module_uploads.upload_id,
module_uploads.upload_name,
module_fieldvals.upload_id,
module_fieldvals.fld_id,
module_fieldvals.value,
module_timelimit.upload_id,
module_timelimit.email,
module_timelimit.expires
FROM
module_timelimit
INNER JOIN module_uploads
ON module_timelimit.upload_id = module_uploads.upload_id
INNER JOIN module_fieldvals
ON module_timelimit.upload_id = module_fieldvals.upload_id
WHERE module_timelimit.expires < $now AND module_fieldvals.fld_id = 2
GROUP BY module_timelimit.expires";
$result = mysql_query($query);
// Delete the rows
$query_deletion = "
DELETE cms_module_uploads_timelimit, cms_module_uploads, cms_module_uploads_fieldvals
FROM
cms_module_uploads_timelimit
INNER JOIN cms_module_uploads
ON cms_module_uploads_timelimit.upload_id = cms_module_uploads.upload_id
INNER JOIN cms_module_uploads_fieldvals
ON cms_module_uploads_timelimit.upload_id = cms_module_uploads_fieldvals.upload_id
WHERE cms_module_uploads_timelimit.expires < $now AND cms_module_uploads_fieldvals.fld_id = 2
GROUP BY cms_module_uploads_timelimit.expires";
$delete_result = mysql_query($query_deletion);
// Check if any queries failed
if(!$result || !$delete_result) {
if (!$result) exit("Error - The selection query did not succeed");
if (!$delete_result) exit("Error - The deletion query did not succeed");
} else {
// set up the settings for FTP to delete file
$ftp_server = 'xxxxxxx';
$ftpuser = 'xxxxxx';
$ftppass = 'xxxxxx';
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftpuser, $ftppass);
if ((!$conn_id) || (!$login_result)) {
echo "Error could not connect to FTP";
} else {
while ($row = mysql_fetch_array($result)) {
$upload_id = $row['upload_id'];
$file = $row['upload_name'];
$email = $row['value'];
// Check if file and email exists
if(isset($file) && isset($email) ) {
$file = '/uploads/adverts/'.$file;
// Delete file
if (ftp_delete($conn_id, $file)) {
echo "$file deleted successfully\n";
} else {
echo "could not delete $file\n";
}
// Send email using CMSMS GCB
$cmsmailer->Send();
}
}
}
// close the connection
ftp_close($conn_id);
}
檢查表名,因為它們在SELECT
和DELETE
是不同的。
雖然有多種格式可以從多個表中刪除,但是您的主要問題是必須從DELETE
語句中DELETE
GROUP BY
子句:
DELETE
FROM cms_module_uploads_timelimit, cms_module_uploads, cms_module_uploads_fieldvals
USING cms_module_uploads_timelimit
INNER JOIN cms_module_uploads
ON cms_module_uploads_timelimit.upload_id = cms_module_uploads.upload_id
INNER JOIN cms_module_uploads_fieldvals
ON cms_module_uploads_timelimit.upload_id = cms_module_uploads_fieldvals.upload_id
WHERE cms_module_uploads_timelimit.expires < $now
AND cms_module_uploads_fieldvals.fld_id = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.