PDA

View Full Version : ارتباط سه جدول



mostafa612003
سه شنبه 22 اسفند 1391, 08:47 صبح
با سلام

من سه جدول دارم که فیلد کد در هر سه جدول مشترک است

ممکن است یک فیلد در هر سه جدول تکرار شده باشد
من می خواهم یک کوئری بنویسم که آخرین کدی که در یکی از این سه جدول درج شده است را بازیابی کنم
یعنی اگه کد 12 در هر سه جدول باشه آخرین باری که کد 12 ذخیره شده را از جدول بخونه

متشکرم

website.expert
سه شنبه 22 اسفند 1391, 12:44 عصر
سلام،
یه مقدار بیشتر توضیح بدید،الان آخرین رکورد ثبت شده رو چجوری میخواید تشخیص بدید؟
آیا تاریخ ثبت رو هم واسه هر کدوم ذخیره می کنید؟
برای ارتباط جداول برای گرفتن query باید از دستور join استفاده کنید،که خود join هم حالات مختلفی داره.
با یه مثال بیشتر توضیح بدید تا بشه بهتر راهنمایی کرد.

mostafa612003
سه شنبه 22 اسفند 1391, 14:59 عصر
خیلی متشکرم
اینطوری توضیح بدم فکر کنم بهتر باشه
فکر کنید می خواهید در یک جدول از دستور distinct استفاده کنید که کدهای تکراری نمایش داده نشوند
حال یک کد شاید در سه جدول تکرار شده باشد و ما می خواهیم که آخرین کد که تاریخ ثبت براش ذخیره شده از سه جدول خوانده شود و نمایش داده شود

باز هم متشکرم

website.expert
سه شنبه 22 اسفند 1391, 16:08 عصر
دوست عزیز منظور من نوع طراحی Table ها بود،
به هر حال من سه تا جدول به نام های t1,t2,t3 ایجاد کردم که هر کدوم دقیقاً سه column به نام های id,name,dateAdded دارن که ممکنه یک id چند بار در یک یا هر جدولی تکرار شده باشه.
دستورات زیر اطلاعات id ای که بزرگترین تاریخ رو داره بر میگردونه:
SELECT TOP 1 *
FROM (
SELECT * FROM t1
UNION
SELECT * FROM t2
UNION
SELECT * FROM t3
) ResultTable
ORDER BY
dateAdded DESC
اگه قسمتی رو اشتباه متوجه شدم بگید.

mostafa612003
چهارشنبه 23 اسفند 1391, 20:18 عصر
سلام
سه جدول هر کدام فیلدهای مخصوص خود را دارند و فقط یک فیلد مشترک (کد) دارند
وقتی این را اجرا کردم این پیغام خطا نمایش داده شد
Query failed: The used SELECT statements have a different number of columns

website.expert
چهارشنبه 23 اسفند 1391, 20:47 عصر
سلام
سه جدول هر کدام فیلدهای مخصوص خود را دارند و فقط یک فیلد مشترک (کد) دارند
وقتی این را اجرا کردم این پیغام خطا نمایش داده شد
Query failed: The used SELECT statements have a different number of columns
شما که گفتی تاریخ ثبت هم همه دارن!
دوست عزیز من علم غیب که ندارم یه توضیحی چیزی بده که بشه راهنمایی کرد،:متفکر:
این یه توضیحه :
"سه تا جدول به نام های t1,t2,t3 که هر کدوم دقیقاً سه column به نام های id,name,dateAdded"
به همین راحتی!
یا عکسی مثل این تاپیک که دوستمون براحتی به جوابشون هم رسیدن:http://barnamenevis.org/showthread.php?388772-%D8%AA%D9%84%D9%81%DB%8C%D9%82-%D8%A7%D9%81%D9%82%DB%8C-3-%D8%AC%D8%AF%D9%88%D9%84

website.expert
چهارشنبه 23 اسفند 1391, 20:50 عصر
در مورد پیغام خطا هم فکر کنم اگه Union ها رو به Union All تبدیل کنید مشکل حل میشه،
ولی فکر نکنم گره از کار شما باز کنه.
بیشتر و بهتر توضیح بدید.

veniz2008
چهارشنبه 23 اسفند 1391, 21:45 عصر
در مورد پیغام خطا هم فکر کنم اگه Union ها رو به Union All تبدیل کنید مشکل حل میشه،
ولی فکر نکنم گره از کار شما باز کنه.
بیشتر و بهتر توضیح بدید.
سلام.
در UNION و UNION ALL باید تعداد ستون های جداول، یکسان و نوع فیلدهای جداول، مشابه و ترتیب ستون های جداول، یکسان باشه.
فرق union و union all اینه که در union از بین مقادیر تکراری یکی رو برمیگردونه ولی union all تمام رکوردهای همه جداول رو برمیگردونه بنابراین امکان وجود داده تکراری وجود داره.

سلام
سه جدول هر کدام فیلدهای مخصوص خود را دارند و فقط یک فیلد مشترک (کد) دارند
وقتی این را اجرا کردم این پیغام خطا نمایش داده شد
Query failed: The used SELECT statements have a different number of columns
علت خطا رو که توضیح دادم. یه راه واسه سوال شما که به ذهن من میرسه میتونه اینطور باشه (منظور از MyDate فیلد تاریخ جداول شما و UID هم id هر جدول هست ).
توجه : من حالت تساوی تاریخ ها رو هم در نظر گرفتم.

declare @id int
declare @date1 nvarchar(10)
declare @date2 nvarchar(10)
declare @date3 nvarchar(10)
----------------------------------------------------------
select @date1 = MyDate from Table_1 where UID = @id
select @date2 = MyDate from Table_2 where UID = @id
select @date3 = MyDate from Table_3 where UID = @id
----------------------------------------------------------
if(@date1 >= @date2 AND @date1 >= @date3)
select * from Table_1 where MyID = @id and MyDate = @date1
else if(@date2 >= @date1 AND @date2 >= @date3)
select * from Table_2 where MyID = @id AND MyDate = @date2
else
select * from Table_3 where MyID = @id AND MyDate = @date3
موفق باشید.

mostafa612003
پنج شنبه 24 اسفند 1391, 14:50 عصر
متشکرم از دوستان
بله شما درست می فرمایید توضیح من خیلی ناقص بود
من سه جدول به نامهای t1,t2,t3 دارم که دو فیلد کد و تاریخ ثبت و سه فیلد دیگر در آنها مشترک است و از نظر تعداد و نوع فیلدهای دیگر با هم متفاوتند
از من خواستند که تمام اطلاعات را از این سه جدول بخوانم به طوری که درگزارش کد تکراری در آن وجود نداشته باشد و فرضا اگر کد 12 در هر سه جدول وجود داشته باشد
اطلاعات رکوردی نمایش داده شود که آخرین بار در بانک ذخیره شده باشد
در ضمن زبان برنامه نویسی من php می باشد

website.expert
جمعه 25 اسفند 1391, 19:46 عصر
دوست عزیز زبان برنامه نویسی تون فرقی نمیکنه،
نرم افزار مدیریت بانک اطلاعاتی تون چی هست؟!
چرا از دستوراتی که veniz2008 (http://barnamenevis.org/member.php?155296-veniz2008) گذاشتن استفاده نمی کنید؟
استفاده کردید جواب نداده؟

mostafa612003
شنبه 26 اسفند 1391, 07:47 صبح
نه جواب نداد
برای اینکه من می خواهم اطلاعات مشترک سه جدول را در یک صفحه نشان بدم ولی دستورات بالا آخرین کد را پیدا می کنه و از یک جدول می خونه

website.expert
شنبه 26 اسفند 1391, 10:58 صبح
میخواید فیلدهایی هم که مشترک نیستند بین جداول نشون داده بشن؟!
یا فقط فیلد های مشترک رو میخواید؟

mostafa612003
شنبه 26 اسفند 1391, 13:08 عصر
با سلام

فقط فیلدهای مشترک

website.expert
شنبه 26 اسفند 1391, 16:23 عصر
این دستورات رو ببین:
SELECT id, MAX(dateadded) AS dateadded
FROM (
SELECT id, dateadded, value1 FROM t1
UNION ALL
SELECT id, dateadded, value1 FROM t2
UNION ALL
SELECT id, dateadded, value1 FROM t3
) AS rt
GROUP BY rt.id
به جای t1,t2,t3 اسم جداول خودت رو بذار و به جای id,dateadded,value1 هم اسم هر چندتا فیلدی که در هر سه جدول وجود داره و مشترکه.

website.expert
شنبه 26 اسفند 1391, 16:37 عصر
راستی یه سوال:
شما میخواید این اطلاعات رو فقط واسه یه رکورد خاص که id رو بهش میدید مثلاً 12 دریافت کنید؟چون کد veniz2008 (http://barnamenevis.org/member.php?155296-veniz2008) به این صورت عمل میکنه.
یا واسه تمامی id های موجود در جداول؟

mostafa612003
یک شنبه 27 اسفند 1391, 09:17 صبح
برای تمامی id های موجود

با تشکر

website.expert
یک شنبه 27 اسفند 1391, 12:16 عصر
پس از دستوراتی که گذاشتم استفاده کن.