PDA

View Full Version : تغییر فیلدی از جدول به طور خود کار



m_karimi
شنبه 18 دی 1389, 21:35 عصر
سلام

من در جدول فیلدی از نوع date تعریف کردم که مقدار آن را
CURDATE()+7 قرار دادم یعنی 7 روز پس از زمان فعلی سیستم.
حالا می خواهم وقتی 7 روز بعد، زمان فعلی سیستم به زمانی که در فیلد بالا تعریف کردم رسید، سیستم به صورت خودکار فیلد دیگر جدول را تغییر دهد. چه طور می تونم این کار را انجام دهم؟

Program3r
یک شنبه 19 دی 1389, 02:04 صبح
هر وقت که زمان حال + 7 روز در دیتابیس , کوچکتر از زمان حال شد.باید فیلد رو تغییر بدید
یه چنین شرطی بزارید تو کد .
مثلا : اگه قرار بود که یک کاربر 7 روز بعد دیگه دسترسی کاربر گرفته بشه می تونید این کد رو داخل فایل لوگین قبل لوگین اینکارو بکنید و ..

m_karimi
دوشنبه 20 دی 1389, 02:41 صبح
جواب سوالم را پیدا کردم.
در mysql 5.1 به بعد امکانی به نام event اضافه شده.به طور مثال دستور زیر

CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END

هر یک روز یک بار دستورات داخل do را اجرا می کند.
http://dev.mysql.com/doc/refman/5.1/en/events-table.html

ghasemweb
سه شنبه 21 دی 1389, 00:30 صبح
جواب سوالم را پیدا کردم.
در mysql 5.1 به بعد امکانی به نام event اضافه شده.به طور مثال دستور زیر

CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END

هر یک روز یک بار دستورات داخل do را اجرا می کند.
http://dev.mysql.com/doc/refman/5.1/en/events-table.html

ببخشيد اين كد بايد كجا قرار بگيره.
مثلا من ميخوام پايان هر روز اطلاعات يك جدول كه تاريخ فيلد date آن قبل از امروز هست پاك بشه ؟ بايد كجا و كدوم page اين كد رو بنويسم؟

m_karimi
سه شنبه 21 دی 1389, 02:11 صبح
ببخشيد اين كد بايد كجا قرار بگيره.
مثلا من ميخوام پايان هر روز اطلاعات يك جدول كه تاريخ فيلد date آن قبل از امروز هست پاك بشه ؟ بايد كجا و كدوم page اين كد رو بنويسم؟

با یک بار اجرای دستور event، این event در دیتابیس شما برای همیشه ثبت میشه و اگر این کد چند بار اجرا شود پیغام event already exist می دهد. برای جلو گیری از این پیغام بعد از
CREATE EVENT خط
IF NOT EXISTS را قرار دهید:

CREATE EVENT IF NOT EXISTS e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END

این دستور را هر جا اجرا کنید event ایجاد میشود. می توانید آن را در خود mysql بنویسید و اجرا کنید یا در یک فایل جدا خارج برنامه یا داخل برنامه قبل از اینکه کد نویسی کنید در فایل index.php قرار دهید.