簡體   English   中英

MySQL INNER JOIN 3表,並使用INNER JOIN刪除

[英]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個問題:

  • 我似乎只能使用fld_id = 2加入表,並按有效期將它們分組。 能夠刪除fld_id = 2和fld_id = 0的數據會很好,但是我似乎收到了重復的電子郵件,因為while循環迭代了4次而不是2次。
  • 我不知道如何刪除數據
  • 有一種方法可以僅使用一個SQL查詢來做到這一點?

到目前為止,這是我的代碼:

            $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);
            }

檢查表名,因為它們在SELECTDELETE是不同的。

雖然有多種格式可以從多個表中刪除,但是您的主要問題是必須從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM