Селектиране и изтриване на записи при определени условия

vinsbg

Registered
Искам да си направя един cronjob, който да се изпълнява всеки час и да изтрива записи ( в случая поръчки ), които не са платени.

Това успях да измисля като заявка, която да провери дали има неплатени през последния час и работи
Код:
SELECT * 
FROM orders
LEFT JOIN payments ON orders.order_id = payments.orderID
WHERE orders.created_at < DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR ) 
AND payments.processed IS NULL

Опитах нещо такова, но не разбирам как точно да направя delete заявката и условието

Код:
	try {
	    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
	    // set the PDO error mode to exception
	    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$select = "SELECT * 
FROM orders
LEFT JOIN payments ON orders.order_id = payments.orderID
WHERE orders.created_at < DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR ) 
AND payments.processed IS NULL ";
		
		$conn->exec($select);

		if( )
                {
		    // sql to delete a record
                }
		    
	}
	catch(PDOException $e)
	{
	    echo $sql . "<br>" . $e->getMessage();
	}
 
$curtime = date('Y-m-d H:i:s');
$curtimestr = strtotime($curtime);
function timeElapsed($time) {
$elapsedTime = time() - $time;

if ($elapsedTime < 1) {
return 'Сега';
}
if ($elapsedTime < 60){
return '< 1 Минута';
}



$trieordersnopayts = mysqli_query ("DELETE FROM orders.order_id WHERE timestamp < NOW()");



Преди ми се наложи и на мен :) , виж това дали ще работи.
 
Благодаря, но не виждам как мога да го ползвам в моя случай. И тази функция timeElapsed не виждам и да я ползвам в заявката..

Не го разбрах примера ти.
 
Веднага ти казвам един много приятен вариант. Слагаш FOREIGN KEY на orders.order_id и payments.orderID - да сочат едно към друго полетата и така като изтриеш ред от payments с orderID = 1, ще се изтрие от свързаната таблица - съответния запис.

По-лесно е от колкото звучи и за такива работи е удобно :)

Разгледай няколко прости примера и си го вгради в таблицте
- https://www.sitepoint.com/mysql-foreign-keys-quicker-database-development/

- http://www.w3schools.com/sql/sql_foreignkey.asp
:idea: :?: :arrow:
 
[sql]DELETE orders
FROM orders
LEFT JOIN payments ON orders.order_id = payments.orderID
WHERE orders.created_at < DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR )
AND payments.processed IS NULL [/sql]
 
raiden каза:
[sql]DELETE orders
FROM orders
LEFT JOIN payments ON orders.order_id = payments.orderID
WHERE orders.created_at < DATE_SUB( CURDATE( ) , INTERVAL 1 HOUR )
AND payments.processed IS NULL [/sql]
Благодаря. Това свърши работа :?:

п.п. joTunkiq мерси за предложението. Знаех, че мога да използвам foreign key, но гледах да го избегна.
 

Back
Горе