وب دیزاینر
8 ماه پیش توسط وب دیزاینر مطرح شد
5 پاسخ

ایمپورت رکوردهای جدول posts در جدول posts دیتابیس دیگر

سلام
فرض کنیم دو دیتابیس در mySQL داریم
دیتابیس A
دیتابیس B
در دیتابیس B ، در جدول posts تعدادی رکورد (مثال : 1000 رکورد) وجود داره. (جدول posts رو کلی مثال میزنم. هر جدول دیگه میتونه باشه )

میخوام فقط از رکوردهای مربوط به product جدول posts در دیتابیس A ، اکسپورت بگیرم (مثال: 500 رکورد product) اون رو در:
جدول posts دیتابیس B ایمپورت کنم.
بصورت پیشفرض اگر اینکار انجام بشه، کل رکوردهای مربوطه دیتابیس B حذف میشن و رکوردهای جدید جایگزین میشه.

برای اینکه کاملا متوجه بشین، بهتره که روی لوکال تست کنید.
برای حل این مشکل چیکار کنم که رکوردهای قبلی حذف نشن و رکوردهای جدید به اون اضافه بشن.

با تشکر


ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 8 ماه پیش مطرح شد
0

خب دستورات insert رو استفاده کنه و داده ها رو بده بهش
خروجی بزن بهت ارایه که داد وارد این سایت شو و به صورت انلاین اون ارایه رو تبدیل کن به کد sql
من تست کردم و مثلا خروجیش میشه کد زیر :

INSERT INTO `posts` (`id`, `migration`, `batch`) VALUES
    ('1', '2014_10_12_000000_create_users_table', '1'),
    ('2', '2014_10_12_100000_create_password_resets_table', '1'),
    ('3', '2019_08_19_000000_create_failed_jobs_table', '1'),
    ('4', '2019_12_14_000001_create_personal_access_tokens_table', '1'),
    ('5', '2023_01_22_160504_create_login_activities_table', '1');

محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 8 ماه پیش مطرح شد
0

سلام
یک راه حل اولیه و ساده که میتونم بهت پیشنهاد بدم اینه که در بخش export گرفتن mysql
یک قسمت داره که به چه نوعی میخوایی داده هاتو خروجی بگیری ازشون که پیشفرض SQL هست
شما بیا به صورت PHP Array خروجی بگیر داده هایی که میخوایی رو
حالا خیلی راحت همین ارایه رو ببر توی پروژت یک حلقه بزار و عمل درج رو یک بار خودت دستی براش پیاده سازی کن
مثلا :

<?php 
$db_conn = mysqli_connect("localhost", "root", "", "devooti");
$user_data  = array(
    "0" => array("Tricia Allison", "USA", "True"),
    "1" => array("Karla Newman", "China", "True"),
    "2" => array("Jessica Munoz", "UK", "False")
);
$serialized_data  = serialize($user_data);
$sql = "insert into list (details) value ('$serialized_data')";
mysqli_query($db_conn, $sql);
?>

وب دیزاینر
@it1press 8 ماه پیش مطرح شد
-1

@salar.mohammad2013
ممنون
من میخوام بدون هیچ کدنویسی اینکار از طریق خود mysql انجام بشه
فرض کن ضخصی که میخواد اینکارو انجام بده، هیچ دانشی از وب نداره .
اما با ایمپورت و اکسپورت mysql کاملا اشناست.


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 8 ماه پیش مطرح شد
0

خب دستورات insert رو استفاده کنه و داده ها رو بده بهش
خروجی بزن بهت ارایه که داد وارد این سایت شو و به صورت انلاین اون ارایه رو تبدیل کن به کد sql
من تست کردم و مثلا خروجیش میشه کد زیر :

INSERT INTO `posts` (`id`, `migration`, `batch`) VALUES
    ('1', '2014_10_12_000000_create_users_table', '1'),
    ('2', '2014_10_12_100000_create_password_resets_table', '1'),
    ('3', '2019_08_19_000000_create_failed_jobs_table', '1'),
    ('4', '2019_12_14_000001_create_personal_access_tokens_table', '1'),
    ('5', '2023_01_22_160504_create_login_activities_table', '1');

مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 8 ماه پیش آپدیت شد
0

سلام دوست من 🖐
امیدوارم حالت خوب و عالی باشی✨

برای انجام این کار توی MySQL و جلوگیری از حذف رکوردهای قبلی در دیتابیس B و اضافه کردن رکوردهای جدید به جدول posts، می‌تونی از دستورات SQL و ترکیبی از INSERT INTO و UPDATE استفاده کنی. اول از دیتابیس A اطلاعات مورد نظر را استخراج (export) میکنید و سپس اونها رو به دیتابیس B اضافه (import) کن. در ادامه یک رویه (stored procedure) رو در ادامه برات مثال میزنم

  1. اول از دیتابیس A اطلاعات مورد نظر را اکسپورت بگیر . برای مثال، اگه فیلدی به نام product در جدول posts دیتابیس A وجود دارع، می‌تونی از دستور SELECT استفاده کنی:
SELECT * FROM database_A.posts WHERE product = 'محصول مورد نظر';
  1. سپس نتایج استخراج شده را در دیتابیس B در جدول posts اضافه کن میتونی از دستور INSERT INTO استفاده کن:
INSERT INTO database_B.posts (column1, column2, ...) VALUES (value1, value2, ...);

برای اضافه کردن بیشترین تعداد رکوردها به دیتابیس B، میتونی از یک حلقه در برنامه‌نویسی استفاده کنی تا رکوردها را به تعداد مورد نظر ایمپورت کنی.

  1. برای جلوگیری از حذف رکوردهای قبلی در دیتابیس B، می‌تونی از دستور UPDATE به جای INSERT INTO استفاده کنی . این دستور بهت اجازه می‌ده رکوردهای موجود را به‌روزرسانی کنی یا رکوردهای جدید را اضافه کنی.

یک روش (stored procedure) دیگه برای انجام این کار در MySQL می‌تواند به شکل زیر باشه

DELIMITER //

CREATE PROCEDURE ImportProducts()
BEGIN
    -- استخراج اطلاعات مربوط به محصول از دیتابیس A
    INSERT INTO database_B.posts (column1, column2, ...)
    SELECT column1, column2, ...
    FROM database_A.posts
    WHERE product = 'محصول مورد نظر';
END;

//

DELIMITER ;

بعد می‌تونی این روند رو اجرا کرده و اطلاعات مورد نظر را به دیتابیس B انتقال بدی

CALL ImportProducts();

این روش بهت امکان می‌ده تا اطلاعات محصولات را به دیتابیس B اضافه کنی بدون اینکه رکوردهای قبلی حذف بشن.


روش دوم

. از دستورات mysqldump برای اکسپورت داده‌ها و mysql برای ایمپورت داده‌ها استفاده می‌کنیم. یه راهنمای کامل تر رو بهت میگم برای مشکلت

اکسپورت داده‌ها از دیتابیس A:

  1. اول از دستور mysqldump برای اکسپورت داده‌های مربوط به محصول از دیتابیس A استفاده کن و نتیجه را در یک فایل SQL ذخیره میکنیم :
mysqldump -u username -p database_A posts --where="product='محصول مورد نظر'" > export.sql

در این دستور:

  • username نام کاربری دسترسی به دیتابیس A است.
  • database_A نام دیتابیس A است.
  • posts نام جدول مورد نظر در دیتابیس A است.
  • product='محصول مورد نظر' شرطی است که تعیین می‌کند که کدام رکوردها باید اکسپورت شوند.
  • export.sql نام فایلی است که داده‌ها در آن ذخیره می‌شوند.
  1. سپس سیستمت از شما درخواست رمز عبور دیتابیس A را می‌کنه . پس از وارد کردن رمز عبور، داده‌ها به فایل export.sql اکسپورت میشن.

ایمپورت داده‌ها به دیتابیس B:

  1. حالا میتونی فایل SQL حاوی داده‌های اکسپورت شده را به دیتابیس B ایمپورت کنی . از دستور mysql برای این کار استفاده می‌کنیم:
mysql -u username -p database_B < export.sql

در این دستور:

  • username نام کاربری دسترسی به دیتابیس B است.
  • database_B نام دیتابیس B است.
  • export.sql نام فایلی است که حاوی داده‌های اکسپورت شده از دیتابیس A است.
  1. مثل مرحله قبل، سیستم شما از شما درخواست رمز عبور دیتابیس B را می‌کنه . پس از وارد کردن رمز عبور، داده‌ها به دیتابیس B ایمپورت می‌شن.

با این کار، داده‌های مربوط به محصول از دیتابیس A به دیتابیس B انتقال پیدا میشن و رکوردهای قبلی در دیتابیس B حذف نمی‌شن

امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹


وب دیزاینر
@it1press 8 ماه پیش مطرح شد
-1

@mahdi.nazari
سلام
انجام دادم نشد.
البته در پیام بالاتر گفتم که فرض کنیم شخصی که میخواد اینکارو انجام بده، هیچ دانشی از کدنویسی نداره .


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام