آفلاین
user-avatar

جداسازای یوزر از جدول دیتابیس

2 سال پیش
توسط مهدی آپدیت شد
آفلاین
user-avatar
مهدی ( 21258 تجربه )
2 سال پیش
تخصص : برنامه نویس وب/اندروید

سلام
من یک جدول دیتابیس دارم که به صورت inner join شده هست. یعنی توی جدول به جای اینکه ای دی یوزر باشه اسمش هست. حالا می خوام یه جدول دیگه درست کنم و اسم ها رو به اون منتقل کنم و توی جدول اصلی فقط ای دی یوزرها باشه. بهترین راه چیه؟
اینو بگم که تعداد رکورد های جدول زیاده و یوزرها در جاهای مختلف تکرار شدند که نمیشه از اول به ترتیب شماره گذاری بشه و عدد بالا بره.

آفلاین
user-avatar
vahid Mohammadi ( 37202 تجربه )
2 سال پیش

@hajmahdi.s
سلام
من فکر میکنم اصطلاح inner join  رو دارید اشتباه به کار میبرید اگر نه؟ شما باید دو تا جدول داشته باشید که از اون دوتا یه جدول به دست میاد که می شه گفت بهش inner join. در اینصورت ساختار او دوتا جدولتون رو بفرمایید
اما من فکر میکنم شاید منظورتون self joint هست .که ارتباط یک جدول با خودش هست.لطفا راهنمایی کنید تا مشکل رو بتونیم با هم حل کنیم

آفلاین
user-avatar
مهدی ( 21258 تجربه )
2 سال پیش
تخصص : برنامه نویس وب/اندروید

من یه جدول دارم که توش چندتا ستونه
عنوان - متن - نویسنده - موضوع
میخوام نویسنده ها رو توی یک جدول جدا ببرم و توی جدول اول فقط ای دی هاشون بمونه. (یه سری از نویسنده ها تکراری هستن. و نمیشه به ترتیب شماره گذاری کنم)
راه حلش چیه؟
توی اکسل یا نرم افزار دیگه ای میشه اینکار رو انجام داد؟
@viva.mohammadi

آفلاین
user-avatar
Bahman Aliveisi ( 18217 تجربه )
2 سال پیش

سلام برای گرفتن لیست اسامی بدون تکرار و id دادن به هر کدام از نویسنده ها

SELECT @id:=0;
SELECT  (@id:=@id + 1) AS num, `authorName` FROM(
SELECT authorName FROM `tableName` GROUP BY authorName
) AS T1

بعد برای جدول قدیمی یک ستون درست کن (author_id)
با یک join ساده میتونی ستون author_id رو آپدیت کنی

آفلاین
user-avatar
vahid Mohammadi ( 37202 تجربه )
2 سال پیش

@hajmahdi.s
به نظر من شما باید دو تا جدول بسازید یکی  Authors (نویسندگان) که شامل (id , AuthorName) باشه و یه جدول به نام Publishes (انتشارات) که شامل ( id,Author_Id, Title,Desc,Article,...) باشه
البته امکان داره یک کتاب رو چندتا نویسنده باهمکاری هم نوشته باشند که در اینصورت شما باید یه رابطه Many to Many  با استفاده از یک جدول رابط Conjunction Table ایجاد کنید. حالا اگر نخواهیم سختش کنیم همون حالتی که خودتون فرمودید رو در نظر میگیریم یعنی یک نویسنده چندتا کتاب یا مقاله نوشته و دلیلی نداره که در هر رکورد اسم نویسنده تکرار بشه.
خب حالا بریم سر اصل مطلب و اون اینکه چطور اون جدول رو تبدیل کنیم به دو تا جدول که رابطه  One to Many دارن:

INSERT INTO Authors
SELECT AuthorName from(SELECT DISTINCT AuthorName FROM oldAuthors)

کد بالا جدول Authors  رو بوجود میاره (oldAuthors اسم جدول قدیمی شماست که داده های تکراری داره)

خب مرحله بعدی تولید جدول Publishes هست که باید فیلد Auther_Id رو از جدول Authors برداره.

آفلاین
user-avatar
مهدی ( 21258 تجربه )
2 سال پیش
تخصص : برنامه نویس وب/اندروید

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

برای ارسال پاسخ باید وارد سایت شوید