View Full Version : اینپورت کردن یک جدول مشابه و بازنشانی مقادیر مشابه و غیر مشابه در آن
farnahad
جمعه 09 فروردین 1392, 16:30 عصر
با سلام
بنده یک انجمن با مای بی بی دارم و به تازگی این انجمن را به یک سرور دیگر انتقال داده ام ولی نمی دانم چرا دیتابیس من در برخی از جدول ها درست انتقال داده نشده است. البته بنده پس از چند ماه متوجه این موضوع شدم که در برخی از تاپیک ها عنوان موضوع و لینک آن تاپیک هست ولی محتوای تاپیک موجود نیست و می گوید "چنین موضوعی موجود نمی باشد" . حال می خواهم از بک آپ دیتابیسی که دارم این جدول را پیدا کنم و اطلاعات جدول بک اپ را به اطلاعات موجود اضافه کنم . از آنجایی که چند ماه است که پست های جدید به این جدول اضافه شده است نمی توانم آن را حذف و با جدول بک آپ جایگزین کنم و باید جدول بک آپ را به این جدول اضافه کنم . حالا مشکل اینجاست که اطلاعات مشترکی در دو جدول وجود دارد و حجم جداول هم بالاست . حجم جدول mybb_posts فشرده شده حدود 12 مگابایت است و هنگام اینپورت کردن به دلیل اشتراک برخی از مطالب اجازه اینپورت نمی دهد و پیغام دابلیکیت و یا همان اشتراک را می دهد و ممکن است دیتابیس فعلی را هم خراب کند . دوستان لطفا راهنمایی بفرمایید چه کار کنم ؟ یعنی چکار کنم که دیتابیس قبلی به دیتابیس جدید اضافه شود و جداول مشترک هم اضافه شوند و جداول جدید هم به دیتابیس وارد شوند؟
مشخصات جدول فعلی :
mybb_posts 30,077 MyISAM utf8_general_ci 80.2 MiB
مشخصات جدول بک آپ :
mybb_posts 32,187 MyISAM utf8_general_ci 66.7 MiB
دقت داشته باشید که تعداد رکورد های جئول بک آپ از جدول فعلی سایت بیشتر است و این نشان دهنده حذف شدن برخی از مطالب سایت می باشد
بنده می خواهم این دو جدول با یک ساختار را با هم مرج ( ترکیب ) کنم
لطفا راهنمایی بفرمایید
ممنون
linuxUser
جمعه 09 فروردین 1392, 17:08 عصر
سلام دوست عزیز
شما باید اول توی همون دیتابیس فعلی تمام جدول بک آپ به یه جدول با یه اسم متفاوت مثل mybb_posts2، منتقل (import) کنی.
بعد با یه کوری ساده زیر اطلاعات منتقل کنی:
insert into mybb_posts(select * from mybb_posts2 where id not in(select id from mybb_posts))
farnahad
جمعه 09 فروردین 1392, 19:35 عصر
از پاسخ شما بسیار ممنونم ولی من خیلی مبتدی هستم
چگونه باید در phpmyadmin جدولی با نام دیگر بسازم . چون من از پایین صفحه reate new table on database را پیدا کردم و یک نام برای جدول وارد کردم ولی بعد به صفحه دیگری منتقل شدم که کلی فیلد داشت اینجا باید چی داخل فیلد ها وارد کنم تا جدول ساخته شود ؟
farnahad
جمعه 09 فروردین 1392, 19:48 عصر
الان یک جدول با یک نام دیگر ساختم ولی هنگام اینپورت کردن این پیام را می دهد :
#1062 - Duplicate entry '15297' for key 'PRIMARY'
دلیل چیست ؟
سعید صابری
جمعه 09 فروردین 1392, 21:12 عصر
پیغام بخونید متوجه میشید میگه به شما که شما دارید مقدار تکراری در یک فیلد PRIMARY وارد می کنید.
linuxUser
جمعه 09 فروردین 1392, 21:15 عصر
خوب پس اول توی localhost خودتون (منظورم رایانه خودتون و wamp یا Xamp هست که با اون کار می کنید) یا اگه راحت تری همون سرور phpmyadmin اجرا کن و یه دیتابیس با هر اسمی که می خوای بساز (create new Database) . بعد کل بک آپ که از دیتابیس داری import کن اون جا؛ خوب حالا باید تمام جداول دیتابیس قبلی براتون ساخته می شه. حالا اسم جدول عوض کن و یه اسم دیگه بذار مثلا mybb_posts2 (روی اسم جدول کلیک کن بعد Operations بعد Rename table to).
حالا همون جدول export کن(فقط همون جدول!!) و داخل دیتابیس جدید import کن. الآن دیگه باید جدولی با اسم mybb_posts2 به جداول دیتابیس اصلی شما اضافه شده باشه. حالا این دستور توی قسمت SQL اجرا کن :
insert into mybb_posts(select * from mybb_post2 where pid not in(select pid from mybb_posts))
این خطا به علت این رخ می ده که کلید اصلی Primary Key که برای mybb_posts ستون pid هست، مقداری تکراری پیدا خواهد کرد؛ یعنی شما توی جدول اصلی تون یه سطر داری که مقدار کلید اصلیش 15297 هست و توی فایل بک آپ تون هم یه سطر دارید که اونم مقدار کلید اصلیش 15297 هست. دستور بالا سطر های تکراری انتخاب نمی کنه.
farnahad
جمعه 09 فروردین 1392, 22:11 عصر
خوب پس اول توی localhost خودتون (منظورم رایانه خودتون و wamp یا Xamp هست که با اون کار می کنید) یا اگه راحت تری همون سرور phpmyadmin اجرا کن و یه دیتابیس با هر اسمی که می خوای بساز (create new Database) . بعد کل بک آپ که از دیتابیس داری import کن اون جا؛ خوب حالا باید تمام جداول دیتابیس قبلی براتون ساخته می شه. حالا اسم جدول عوض کن و یه اسم دیگه بذار مثلا mybb_posts2 (روی اسم جدول کلیک کن بعد Operations بعد Rename table to).
حالا همون جدول export کن(فقط همون جدول!!) و داخل دیتابیس جدید import کن. الآن دیگه باید جدولی با اسم mybb_posts2 به جداول دیتابیس اصلی شما اضافه شده باشه. حالا این دستور توی قسمت SQL اجرا کن :
insert into mybb_posts(select * from mybb_post2 where pid not in(select pid from mybb_posts))
این خطا به علت این رخ می ده که کلید اصلی Primary Key که برای mybb_posts ستون pid هست، مقداری تکراری پیدا خواهد کرد؛ یعنی شما توی جدول اصلی تون یه سطر داری که مقدار کلید اصلیش 15297 هست و توی فایل بک آپ تون هم یه سطر دارید که اونم مقدار کلید اصلیش 15297 هست. دستور بالا سطر های تکراری انتخاب نمی کنه.
وایییییییییییییییییییی مرسی مهندس
باور کنید کل نت را گشتم ولی چیزی پیدا نکردم .
درست شد این هم خروجی :
5467 row(s) inserted. ( Query took 49.9013 sec )
INSERT INTO mybb_posts(
SELECT *
FROM mybb_posts3
WHERE pid NOT
IN (
SELECT pid
FROM mybb_posts
) )
باز هم ممنون از پاسخ جامع و دلسوزانه شما:تشویق::قلب:
linuxUser
جمعه 09 فروردین 1392, 22:56 عصر
قابلی نداشت
farnahad
دوشنبه 03 شهریور 1393, 15:48 عصر
با سلام
پس از چند ماه دوباره به این مشکل بر خوردم و دوباره مطلب شما را پیدا کردم و مشکلم برای یکی از جداول حل شده ولی برای یک جدول دیگه با ین دستور مشکل حل نمیشه و دو جدول با هم ادغام نمیشن .
میخواستم لطفا راهنمایی مجدد بفرمایید چون شما بهترین راهنمایی را قبلا انجام دادید .
با تشکر
مشکل :
من می خواهم جدولی با نام mybb_threads را با جدولی با همین نام که در فایل بک آپ سایتم هست ترکیب یا ادغام یا جوین نمایم . به گونه ای که اطلاعات موجود در جدول بک آپ به اطلاعات جدول فعلی اضافه شود تا اگر اطلاعات جدول فعلی احتمالا ناقص شده است ، دوباره تکمیل شود .
راهکا شما چیست و اگر ممکن است کوئری یا کد مربوطه را برای من اینجا قرار دهید .
بنده طبق آموزشی که قبلا داده بودید یک دیتابیس با نام mybb_threads_bak ساختم و جداول فایل بک آپ را در آن انپورت کردم و سپس با استفاده از دستور زیر جدول بکاپ یعنیmybb_threads_bak را د رجدول mybb_threads اینپورت کردم ولی نشد:
insert into mybb_threads(select * from mybb_threads_bak where pid not in(select pid from mybb_threads))
ارور پیدا نکردن pid میداد .
یک یک بار هم با tid امتحام کردم پیغا خطا نداد و اینپورت شد و پیغام خاصی نداد ولی اطلاعات جداول در این جدول جدید قرار نگرفت و مطالب ناقص در سایت نمایش داده می شود .
insert into mybb_threads(select * from mybb_threads_bak where tid not in(select tid from mybb_threads))
چه کدی باید برای ترکیب بی عیب و نقص این دو جدول اسفاده کنم؟
122662
ممون از شما
farnahad
سه شنبه 04 شهریور 1393, 01:01 صبح
دوستان لطفا کمک کنید
یعنی هیچکی اینجا با phpmyadmin کار حرفه ای نکرده ؟!!!
farnahad
چهارشنبه 05 شهریور 1393, 22:08 عصر
آقا چطوری دو جدول را با هم ترکیب کنم یا چطوری اطلعات جدول قبلی را به جدول فعلی اضافه کنم؟
farnahad
چهارشنبه 05 شهریور 1393, 23:20 عصر
آقا چطوری دو جدول را با هم ترکیب کنم یا چطوری اطلعات جدول قبلی را به جدول فعلی اضافه کنم؟
میدونستم ایرانیا خود خواه تر از این هستن که به کسی کمک کنند
miladamirzadeh
پنج شنبه 06 شهریور 1393, 10:36 صبح
آقا چطوری دو جدول را با هم ترکیب کنم یا چطوری اطلعات جدول قبلی را به جدول فعلی اضافه کنم؟
میدونستم ایرانیا خود خواه تر از این هستن که به کسی کمک کنند
دوست عزیز حتماً کسی جواب شما را نمی داند. می توانی سوالت را تو یک فروم بین المللی مثل Stackoverflow.com مطرح کنی و اولین جوابها را در عرض چند دقیقه بگیری.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.