Как удалить записи из 1 таблицы на основе значения метки времени в другой таблице? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать несколько php и sql для запланированной задачи, которая бы объединяла 2 таблицы по значению и удаляла все записи из table1 на основе значения метки времени unix в table2.До сих пор я придумал следующий код, но не хочу его запускать, поскольку он может принести больше вреда, чем пользы.Может ли кто-нибудь помочь с этим?Заранее спасибо

$sql = "DELETE FROM tbl_code
LEFT JOIN ( SELECT * FROM `tbl_ctoon` WHERE tbl_code.ctoon_id=tbl_ctoon.ctoon_id AND tbl_code.code_for='C')
WHERE DATEDIFF( date(NOW( )) , FROM_UNIXTIME(expire_date)) > 3 ";
$del = new database();
$del->myquery($sql, 1);

Таким образом, в конечном итоге он объединит две таблицы и удалит все записи из tbl_code, где expire_date в tbl_ctoon превышает 3 дня.

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

Перед удалением я бы проверил запрос с помощью выбора.Ваш запрос может выглядеть проще:

$sql = "SELECT * FROM tbl_code 
LEFT JOIN tbl_ctoon 
ON tbl_code.ctoon_id = tbl_ctoon.ctoon_id AND tbl_code.code_for = 'C' 
WHERE DATEDIFF(DATE(NOW()), FROM_UNIXTIME(expire_date)) > 3 AND tbl_ctoon.ctoon_id IS NOT NULL";

Тогда, если ваш запрос возвращает записи, которые вы хотите удалить, выполните удаление:

$sql = "DELETE FROM tbl_code 
LEFT JOIN tbl_ctoon 
ON tbl_code.ctoon_id = tbl_ctoon.ctoon_id AND tbl_code.code_for = 'C' 
WHERE DATEDIFF(DATE(NOW()), FROM_UNIXTIME(expire_date)) > 3 AND tbl_ctoon.ctoon_id IS NOT NULL";
0 голосов
/ 28 марта 2019

Поскольку JOIN не работал, я пошел другим путем. Я запустил это, и он нормально работал в phpmyadmin для моей базы данных.

DELETE FROM tbl_code WHERE prz_award IN (SELECT ctoon_id FROM tbl_ctoon WHERE DATEDIFF(DATE(NOW()), FROM_UNIXTIME(expire_date)) > 120) AND tbl_code.code_for = 'C'
0 голосов
/ 27 марта 2019

Вы должны присоединиться к таблице внутри подзапроса yle для получения правильного результата

DELETE tbl_code 
FROM tbl_code
INNER JOIN (
    SELECT tbl_ctoon.expire_date , tbl_ctoon.ctoon_id 
    FROM `tbl_ctoon` 
    LEFT JOIN tbl_code ON tbl_code.ctoon_id=tbl_ctoon.ctoon_id 
               AND tbl_code.code_for='C'
    ) t2 ON t2.ctoon_id =tbl_code.ctoon_id
            AND DATEDIFF( date(NOW( )) , FROM_UNIXTIME(t2. expire_date)) > 3 
WHERE tbl_code.code_for='C'

для проверки задействованных строк, которые вы можете

SELECT *  
FROM tbl_code
INNER JOIN (
    SELECT tbl_ctoon.expire_date , tbl_ctoon.ctoon_id 
    FROM `tbl_ctoon` 
    LEFT JOIN tbl_code ON tbl_code.ctoon_id=tbl_ctoon.ctoon_id 
               AND tbl_code.code_for='C'
    ) t2 ON t2.ctoon_id =tbl_code.ctoon_id
            AND DATEDIFF( date(NOW( )) , FROM_UNIXTIME(t2. expire_date)) > 3 
WHERE tbl_code.code_for='C'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...