質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

1843閲覧

DBから条件に当てはまったレコードを削除したい。

tgmdik

総合スコア12

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/02/12 13:24

###前提・実現したいこと
ECサイトにて、注文後10日以内に入金がなかった場合に注文情報を削除するという
プログラムを組み、定期実行したいと思っています。

データベースから注文番号と更新日時を取得し、
更新日時と現在の日時を比較した場合に差が10(日)を超えた場合に
その注文情報を削除するという流れで考えております。

###該当のソースコード

php

1<?php 2 3try{ 4 $dsn = 'mysql:dbname=***;host=***'; 5 $user = '***'; 6 $password = '***'; 7 $dbh = new PDO($dsn, $user, $password); 8 $dbh->query('SET NAMES utf8'); 9 10 //staus=2は入金待ち 11 $sql = 'SELECT order_id,update_date FROM dtb_order WHERE status=2'; 12 $stmt = $dbh->query($sql); 13 14 foreach ($stmt as $value) { 15 16 function time_diff($time_from, $time_to) 17 { 18 $dif = $time_to - $time_from; 19 $dif_days = (strtotime(date("Y-m-d", $dif)) - strtotime("1970-01-01")) / 86400; 20 return "{$dif_days}"; 21 } 22 $from = strtotime("$value['update_date']"); 23 $to = strtotime("now"); 24 $timediff = time_diff($from, $to); 25 26 if($timediff > 10){ 27 //現在との差が10日以上ある場合 28 $sql = 'DELETE FROM dtb_order where order_id=?'; 29 $stmt = $dbh->prepare($sql); 30 $data[] = $value['order_id']; 31 $stmt->execute($data); 32 } 33 } 34} 35catch(Exception $e){ 36 print'ただいま障害により大変ご迷惑をお掛けしております。'; 37 exit(); 38} 39?>

###補足情報(言語/FW/ツール等のバージョンなど)
Server: 5.6.23-log - MySQL Community Server (GPL)
phpMyAdmin: 4.0.10.18
Apache: 5.1.73

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

sql

1DELETE FROM dtb_order where status = 2 and adddate(update_date, INTERVAL + 10 day) < now()

投稿2017/02/12 14:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tgmdik

2017/02/12 15:50

求めていた形です、ありがとうございました。。
guest

0

回答ではないですが、合致した注文情報はステータスを99とかに変更して、データ自体は残したほうが良くないですか?
注文情報を削除してしまうことに抵抗を感じます。

投稿2017/02/12 14:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tgmdik

2017/02/12 15:51

おっしゃる通りだと思いました。 ご指摘ありがとうございます。
guest

0

基本的に16行目からのtime_deff()関数がforeach{ }の中にあるのが妙です。try{ の前に置きましょう。
さらに日数の計算は以下のように単純に記述できます。関数にする必要もないのではないでしょうか。

php

1 function time_diff($time_from, $time_to) 2 { 3 return = (strtotime($time_to) - strtotime($time_from)) / 86400; 4 } 5

投稿2017/02/12 14:13

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問