私のマシンには (GMT +6:00 Astana,Dhaka) があります。PHPスクリプトでタイムゾーンを設定しました
date_default_timezone_set('Asia/Dhaka');
ただし、関数で間違った日付が表示される場合がありdate()
ます。私のphpサーバーがGMT時間を設定していない可能性があります。
しかし、私のmysqlサーバーは私のマシンシステムのタイムゾーンをキャッチします. だから私はphpで同じ必要があります。
ここで私のデータベーステーブルの概要
SHOP_BALANCE-------------shop_balance_id(PK,AI,INT),shop_balance(DOUBLE),dates(DATE)
PRODUCT_PURCHASE_ITEM----product_purchase_item_id(PK,AI,INT),product_id(INT),
pr_pur_cost_price(DOUBLE),pr_pur_unit_price(DOUBLE),
quantity(INT),product_size(INT),dates(TIMESTAMP),
bool_check(TINYINT)
PRODUCT_PURCHASES--------product_purchase_id(PK,AI,INT),insert_operation(INT),
product_purchase_item_id(FK ref of PRODUCT_PURCHASE_ITEM).
product_id(INT),dates(TIMESTAMP),product_size(INT)
アイデアは、日付が一致する場合、この日にショップの残高が減少することです。日付がショップ残高の最後の日付である場合、ショップ残高も減少していますが、新しい日付を挿入してください
ここに私のコード
shop_balance テーブルの最後の行の mysql 日付を見つけます。私の日付列はdate
タイプです
$query=$this->db->query("select dates from shop_balance order by dates desc limit 1");
$rowfind_last_stock=$query->row();
if(isset($rowfind_last_stock->dates)){
$find_last_date=$rowfind_stock->dates;
}
私のPHPサーバーで今日の日付を見つける.
$today=date("Y-m-d");
別のクエリの日付を確認する
if($find_last_date==$today){
//run update query
$this->db->query(
"UPDATE
shop_balance AS s
INNER JOIN
(
SELECT p.dates,SUM(pr_pur_cost_price*quantity) AS net
FROM product_purchase_item AS i
LEFT JOIN product_purchases AS p
ON p.product_purchase_item_id=i.product_purchase_item_id
WHERE p.insert_operation='$id'
GROUP BY p.insert_operation
) AS a
ON s.dates=date(a.dates)
SET s.shop_balance=s.shop_balance-a.net
);"
}
else{
//run insert query
$this->db->query(
"INSERT INTO shop_balance
SELECT null,
(
(
SELECT shop_balance
FROM shop_balance
ORDER BY shop_balance_id
DESC LIMIT 1
)
-
(
SELECT p.dates,SUM(pr_pur_cost_price*quantity) AS net
FROM product_purchase_item AS i
LEFT JOIN product_purchases AS p
ON p.product_purchase_item_id=i.product_purchase_item_id
WHERE p.insert_operation='$id'
GROUP BY p.insert_operation
)
),
curdate();"
);
}
問題は、異なるインストール時にphpとmysqlの日付で同じ日付でも挿入クエリを実行することがあります。両方のタイムゾーンをGMT +6.00より上に設定しました。なぜこの問題?