PDA

View Full Version : تعویض تاریخ ها در my sql



saeid99999
سه شنبه 01 اسفند 1391, 14:49 عصر
سلام میخواستم یه راهنمایی بکنید من تو یه دیتابیسی اخبار رو نگه میدارم بعد فیلدی که تاریخ توش میمونه یه مشکلی پیدا کرده یعنی مثلا اخبار با شماره ای دی 1 تاریخش شده برای مطلب 1000 و اخبار شماره ای دی 1000 تاریخش شده برای خبر 1 یعنی دقیق برعکس هم عوض شدن جاهاشون
حالا با چه کدی میتونم کل همه اینا رو دوباره برگردونم سر جاش؟

نکته: تعداد خبر ها حدود 10000 تا هستش یه کدی بدین تو سرور راحت اجرا بشه واسه 10000 مرسی

saeid99999
سه شنبه 01 اسفند 1391, 19:19 عصر
کسی نبود راهنمایی کنه؟

saeid99999
سه شنبه 01 اسفند 1391, 21:34 عصر
کسی نیست خیلی واجبه

mojtaba.baghban
سه شنبه 01 اسفند 1391, 22:07 عصر
مگه خود بخود هم تاریخ‌ها عوض می‌شن؟
اگه idها عوض شده که مشکلی نیست.
موقع کوئری گرفتن بر اساس تاریخ مرتب کن

saeid99999
سه شنبه 01 اسفند 1391, 23:11 عصر
مگه خود بخود هم تاریخ‌ها عوض می‌شن؟
اگه idها عوض شده که مشکلی نیست.
موقع کوئری گرفتن بر اساس تاریخ مرتب کن

نه ببیند من از سیستم نیوک استفاده میکنم حالا موقع اپگرید این اتفاق افتاده شما فقط با یه مثال کوچیک راهنمایی کنید ممنون میشم

Yuness Mehdian
چهارشنبه 02 اسفند 1391, 00:20 صبح
اگه این جابه جایی طبق یک نظم خاص اتفاق افتاده باشه به راحتی میشه اصلاحش کرد . اگه به صورت random به هم ریختن کاری نمیشه کرد . چند تا از رکورد ها رو بررسی کنید و اگه تونستید یک نظمی پیدا کنید میشه مراحل رو به صورت بالعکس کد نویسی کرد تا به حالت اولیه برگردن . در غیر اینصورت کاری نمیشه کرد

mojtaba.baghban
چهارشنبه 02 اسفند 1391, 00:25 صبح
کوئری باید یه همچین چیزی باشه
select * from table order by date desc

saeid99999
چهارشنبه 02 اسفند 1391, 00:43 صبح
اگه این جابه جایی طبق یک نظم خاص اتفاق افتاده باشه به راحتی میشه اصلاحش کرد . اگه به صورت random به هم ریختن کاری نمیشه کرد . چند تا از رکورد ها رو بررسی کنید و اگه تونستید یک نظمی پیدا کنید میشه مراحل رو به صورت بالعکس کد نویسی کرد تا به حالت اولیه برگردن . در غیر اینصورت کاری نمیشه کرد

بله با نظم خواستی هستن مثلا برای آخرین مطلب اولین هستش و از اول دوم برای از آخر دوم هستش

میشه از یه آرایه استفاده کرد همه زمان ها رو توش نگه داشت بعد بر عکس تو دیتابیس آپدیت کرد؟

رضا قربانی
چهارشنبه 02 اسفند 1391, 10:54 صبح
اینجا رو یه دید بزن شاید فکری جدیدی واست اومد :
http://barnamenevis.org/showthread.php?325327-replace-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C-%D8%AA%D9%88%D8%B3%D8%B7-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-sql&highlight=replace

Yuness Mehdian
چهارشنبه 02 اسفند 1391, 19:59 عصر
آره میشه . باید تاریخ اولی رو با آخری عوض کنی و دومی رو با دومی از آخر و سومی رو با سومی از آخر تا برسی به وسط جدول . بهترین راه حل هم همون آرایه است یه چیزی تو این مایه ها باید بنویسی :



//fetch date fields from database
$mysqli = new mysqli(host_Address, user_Name, password, db_Name);
$results = $mysqli->query("select primary_Key_Field, date_Field from mytable");
$dates = array();
$primary_Key_Fields = array();

//copy date fields into $dates array
while ($row = $results->fetch_assoc()){
$dates[] = $row["date_Field"];
$primary_Key_Fields[] = $row["primary_Key_Field"];
}

//swap dates
$j = $results->num_rows;
for($i=0; $i<floor($results->num_rows/2)-1; $i++){

//swap date fields
$temp = $dates[i];
$dates[i] = $dates[j];
$dates[j] = temp;

$j--;
}

//update date fields
for($i=0; $i<$results->num_rows; $i++)
$mysqli->query("update mytable set date_Field = $dates[i] where primary_Key_Field = $primary_Key_Fields[i]");



تو این روش باید هم فیلد تاریخ و هم فیلدی که تو اون جدول یکتاست رو برداری و بریزی تو یه آرایه . البته اینجا من از دو تا آرایه استفاده کردم . بعد بیای از اول لیست حرکت کنی تا وسط و یه متغیر هم بگیری که از آخری بیاد تا وسط بعد کافیه اندیس متناظر این دو رو تو آرایه تاریخ ها باهم عوض کن . بعدشم که آسونه دیگه دو تا آرایه داریم یکیش فیلد کلید ها رو تو خودش داره و یکیش هم فیلد تاریخ های اصلاح شده بعدش میایم از رو اونا ردوباره جدول رو به روز رسانی میکنیم . توصیه میکنم قبل از انجام هر گونه تغییر حتما از وجود این نظم مطمئن بشی اگه این کد رو اجرا کنی و متوجه بشی که اشتباه کردی دوباره باید اجراش کنی که برگردن به حالت قبل . البته شاید این روش اصلا بهینه نباشه ولی واسه یک بار اجرا خوبه . راستی من هرچی فکر میکنم نمیفهمم که چرا باید طبق این نظمی که گفتی فقط فیلد های تاریخ به هم بریزن حتما تحقیق کن شاید بعضی فیلد ها اینطوری باشن و گولت بزنن یه کار دیگه هم میشه کرد یه کپی از جدوله بگیر و این جدول اصلی رو اسمشو عوض کن و ایدن کد رو رو اون جدول جدیده که کپی گرفتی اجرا کن و رو سایت نگاه کن ببین تاریخ ها مشکلی نداشته باشن، اگه حل شد که اون جدول اصلی رو حذف کن (که تغییر نامش دادی) اگه تاریخ ها بازم به هم ریخته هستن این جدول دومی که کپی گرفتی رو حذف کن و قبلی رو تغییر نام بده و یه فکر دیگه بکن:لبخندساده: .موفق باشی