نحوه سینک کردن جداول

پرسیده شده
فعالیت 1441 روز پیش
دیده شده 1098 بار
0

سلام

من از قابلیت مولتی سایت وردپرس استفاده میکنم و 3 سایت ایجاد شده که همگی ووکامرس دارن و هر کردوم هم مشتری های خاص خودشون رو دارن.

 

حالا من میخواستم وقتی توی یکی از سایتها محصولی قرار میگیره توی اون دوتای دیگه هم قرار بگیره.

چه طور میتونم این کار رو بکنم که اتوماتیک سینک بشه؟

 

حتی اگر اتوماتیک هم سینک نشه بعد از ارسال هر محصول جدید یه بار بشه کوئری رو دستی ران کرد.

 

در واقع:

میخوام از جدول wp-post مقادیری که post-type اونها product و post-status اونها publish هست رو توی جدول wp-2-post و wp-3-post کپی کنه و post-id رو هم در جدول wp-postmeta چک بکنه و تمام مقادیر مربوط به اون ای دی رو داخل جدول wp-2-postmeta و wp-3-postmeta بریزه.

 

1- اگر این کار رو کنم نتیجه ای که میخوام حاصل میشه؟

2- چه کوئری باید بنویسم؟

3- اگر بخوام اتوماتیک انجام بدم راهکاری هست؟

 

 

فایل پیوست

محمد بانشی
محمد بانشی

29 اردیبهشت 99

2
حذف شده

اگر محصولات واقعا یکی هست من پیشنهاد نمی کنم که کپی شون کنید و داده های تکراری ایجاد کنید. چون فردا هر تغیری و آپدیتی هم که بدید باید بره روی کپی ها اعمال بشه.

یه راه حل بهتر می تونه این باشه که روی یکی از سایت ها (به عنوان سایت اصلی) محصولات رو ثبت کنید.

بعد یه API بنویسید برای این سایت اصلی.

بلاگهای دیگه این API رو صدا بزنن و محصولات رو اطلاعاتشون رو از این طریق از یک منبع بگیرن

وقتی داده ها رو کپی می کنید احتمال ایجاد ناسازگاری بین کپی ها بالا میره و مدام باید حواستون باشه که سینک شه. و این دردسر زیاد داره

 
 
 
 
فایل پیوست

لقمان آوند

توسط

لقمان آوند

29 اردیبهشت 99

0
حذف شده

سلام.

در مورد اینکه برای وردپرس پلاگینی در این منظور درست شده یا نه اطلاعی ندارم ولی اگر از دید خود Mysql بخوام نظر بدم، میتونید یک Trigger برای After Insert ایجاد کنید که هر موقع اینسرتی روی جدول wp_posts انجام شد، بصورت اتومات کوئری های مد نظرتون ران بشه.(یا یک stored procedure رو call کنید.)

* داخل PHPMyadmin سربرگ Triggers وجود داره میتونید اونجا trigger هاتون رو مدیریت کنید یا میتونید با ران کردن یک Query یک trigger ایجاد کنید. همچنین سربرگ Routines هم برای مدیریت stored procedure وجود داره.

 

برای کپی یک row (یا تمام داده های جدول یا structure جدول + داده های جدول) میتونید از کوئری هایی که PHPMyadmin تولید میکنه کمک بگیرید.

مثلا اگر میخواهید بعد ازینکه اینسرتی داخل wp_posts انجام شد، رکورد جدید داخل wp_۲_posts کپی بشه میتونید داخل trigger به این شکل کوئری بنویسید:

INSERT INTO `dbName`.`wp_2_posts` SELECT * FROM `dbName`.`wp_posts` WHERE `dbName`.`wp_posts`.id = NEW.id;

میتونید چندین کوئری رو اجرا بگیرید و عملیاتی که مدنظرتونه بعد از هر اینسرت(داخل wp_posts) بصورت اتومات انجام بشه.

البته با استفاده از PHP هم اینکارهارو میشه انجام داد.یک transaction ست میکنید و چندین کوئری رو اجرا میگیرید ولی داخل خود Mysql بصورت مستقیم مدیریت و اجرا بگیرید بنظرم راه مناسبتر و بهینه تری است تا اینکه از طرف PHP و از طریق درایور ها(interface) این عملیات انجام بشه.

فایل پیوست

محسن موحد

توسط

محسن موحد

29 اردیبهشت 99