PDA

View Full Version : یک مشکل در گرفتن کوئری



جواد ملاولی
سه شنبه 14 اردیبهشت 1389, 06:03 صبح
سلام.
من در برنامه ام تعدادی کتاب دارم. هر کدام از این کتابها باید مراحلی را در برنامه طی کنند؛ مثل ثبت کتاب و اختصاص متن به اون، ویرایش اولیه متن کتاب، استایل بندی کتاب و ... .
یه جدول هم دارم که هر مرحله ای که برای یک کتاب طی میشه تو اون ثبت میشه. این جدول فیلدهایی مثل: نام مرحله، کاربر مربوطه، وضعیت انجام(در حال انجام، کامل)، تاریخ و ساعت انجام مرحله و ... داره. بنابراین اگر همه ی مراحل برای یک کتاب طی بشه، به تعداد مراحل برای این کتاب رکورد ثبت میشه. حالا من می خوام یه کوئری بگیرم که لیست کتابها رو بده و اسم هر کدام از این مراحل را به صورت فیلد نشون بده و ببینم که انجام شده یا نه (از روی فیلد وضعیت انجام).
یه کاری که خودم کردم این بود که به ازای هر مرحله یه کوئری گرفتم و بعد خواستم همه ی این کوئری ها رو join کنم که خطای query is too complex رو میده. چه راه دیگه ای برای اینکار هست؟

حسین شهریاری
سه شنبه 14 اردیبهشت 1389, 09:27 صبح
سلام

بهتره برای این کار 3 جدول داشته باشین:

1-جدول مشخصات کامل یک کتاب
2-جدول مراحل کاری
3-جدول ثبت عملکرد

در جدول اول و سوم کدی مانند کد کتاب باید مشترک باشد.جدول سوم در اصل جدول پل(Br Table)میباشد

مثلا:
جدول کتاب:کدکتاب-نام و عنوان-ناشر-شابک و....
جدول مراحل:کدمرحله کاری-عنوان مرحله کاری
جدول عملیات:کد کتاب-کدمرحله کاری-وضعیت

اگه اینطوری اطلاعاتتونا ثبت کنید هر نوع گزارشی دوست داشته باشی میتونی ازش بگیری.

موفق باشید

جواد ملاولی
سه شنبه 14 اردیبهشت 1389, 11:11 صبح
سلام

بهتره برای این کار 3 جدول داشته باشین:

1-جدول مشخصات کامل یک کتاب
2-جدول مراحل کاری
3-جدول ثبت عملکرد

در جدول اول و سوم کدی مانند کد کتاب باید مشترک باشد.جدول سوم در اصل جدول پل(Br Table)میباشد

مثلا:
جدول کتاب:کدکتاب-نام و عنوان-ناشر-شابک و....
جدول مراحل:کدمرحله کاری-عنوان مرحله کاری
جدول عملیات:کد کتاب-کدمرحله کاری-وضعیت

اگه اینطوری اطلاعاتتونا ثبت کنید هر نوع گزارشی دوست داشته باشی میتونی ازش بگیری.

موفق باشید
دوست عزیز ضمن تشکر از شما؛
جدولهای من هم به همین شکل هستند که شما میگید، ولی اون گزارشی که می خوام نمی تونم بگیرم؛ گزارشی که من می خوام یه چیزی شبیه عکس زیره؛ که هر کدام از فیلدهای دی بی گرید، یک مرحله ی کاری هستند.

حسین شهریاری
سه شنبه 14 اردیبهشت 1389, 12:07 عصر
شبه کد SQL زیر را مشاهده و ایده بگیرید:


Select BrTable.book#,bname,Cycle.* from Brtable inner join Books
on(BrTable.book#=Books.book#) inner join Cycle
on( BrTable.CyC#‎=Cycle.CyC#‎)

با فرض اینکه:
جدول Books محتوی اطلاعات کتابها
جدول Cycle محتوی اطلاعات مراحل کاری
جدول BrTable هم جدول واسط

موفق باشید

جواد ملاولی
سه شنبه 14 اردیبهشت 1389, 14:40 عصر
دوست عزیز؛ لطفا عکس ضمیمه رو ببینید؛ دستوراتی که شما نوشتید نتیجه اش دی بی گرید بالاییه، ولی من می خوام یه چیزی شبیه دی بی گرید پایینی داشته باشم.
http://www.4shared.com/photo/QIDfIcMK/MyTable.html

حسین شهریاری
سه شنبه 14 اردیبهشت 1389, 21:34 عصر
دوست عزیز شما در تاپیک قبلی سوال متفاوتی پرسیدی و تصویر متفاوتی پرسیدی من هم بنا بر صورت سوال جواب دادم.
ولی چیزی که شما الان مطرح کردید با بحث Master/Details حل میشه.اگه نتونستی بگو تا برات بازش کنم.

جواد ملاولی
سه شنبه 14 اردیبهشت 1389, 21:50 عصر
دوست عزیز شما در تاپیک قبلی سوال متفاوتی پرسیدی و تصویر متفاوتی پرسیدی
نه متفاوت نبود، شما اشتباه متوجه شدی؛ در پست شماره 3 هم عکسش رو گذاشتم.


ولی چیزی که شما الان مطرح کردید با بحث Master/Details حل میشه.اگه نتونستی بگو تا برات بازش کنم.
آخه مؤمن نیکی و پرسش؟!! بگو ببینم با Master/Details چه جوری می خوای درستش کنی؟
ضمناً از اینکه وقت میذاری ممنونم.

حسین شهریاری
سه شنبه 14 اردیبهشت 1389, 22:58 عصر
لطف کن اگه میشه یه کپی از جداوات همراه با داده برام قرار بده یا Mail بزن تا برسی کنم و یه نمونه Source براتون بفرستم.

موفق باشید

جواد ملاولی
چهارشنبه 15 اردیبهشت 1389, 19:56 عصر
آخه دوست عزیز با Master/Detail چه جوری میشه این مسأله رو درستش کرد.
اصلاً فرض کن که یه جدول داریم و محتویاتش تصویر شماره ی 1 (سمت راست) هستش، حالا می خوایم محتویات این جدول رو بصورت تصویر شماره 2 (سمت چپ) نشون بدیم؛ این که با Master/Detail حل نمیشه. اگه اشتباه می کنم شما اصلاح کنید.

جواد ملاولی
جمعه 17 اردیبهشت 1389, 18:26 عصر
از رفقا کسی در مورد پست آخر نظری نداره؟

goldkavir
دوشنبه 20 اردیبهشت 1389, 12:11 عصر
سلام
به نظر من با master/Detail حل نمیشه

از این کد استفاده کنید


Select * ,
Select ActionName From ActionList Where ActionCode = 1 And BookCode = B.BookCode) SabteAvaliye)
/*با فرض اینکه کد 1 برای ثبت اولیه باشه*/
,
Select ActionName From ActionList Where ActionCode = 2 And BookCode = B.BookCode)VirayesheMatn)
/*با فرض اینکه کد 2 برای ویرایش متن باشه*/
,
.
.
.

From Book B

با فرض اینکه Book اطلاعات کتاب و ActionList عملیات مورد نظر باشه
ضمنا به ازای هر عملیاتی یه SubQuery بذارید


امیدوارم جواب بده

جواد ملاولی
سه شنبه 21 اردیبهشت 1389, 13:04 عصر
سلام
به نظر من با master/Detail حل نمیشه

از این کد استفاده کنید


Select * ,
Select ActionName From ActionList Where ActionCode = 1 And BookCode = B.BookCode) SabteAvaliye)
/*با فرض اینکه کد 1 برای ثبت اولیه باشه*/
,
Select ActionName From ActionList Where ActionCode = 2 And BookCode = B.BookCode)VirayesheMatn)
/*با فرض اینکه کد 2 برای ویرایش متن باشه*/
,
.
.
.

From Book B

با فرض اینکه Book اطلاعات کتاب و ActionList عملیات مورد نظر باشه
ضمنا به ازای هر عملیاتی یه SubQuery بذارید


امیدوارم جواب بده
دوست عزیز؛ این SubQuery ها به ازای هر رکورد از کوئری اصلی، بیشتر از یه رکورد بر می گردونه و خوب طبیعتاً خطا میده.

mehdimdp
سه شنبه 21 اردیبهشت 1389, 22:42 عصر
اگه زحمت بکشید و یک کپی از بانکتون (جداول + مقدار کمی اطلاعات ) اینجا بذارین شاید بتونم کمکی بکنم.
یه چیزایی تو ذهنم هست که اول باید روی جداول تست کنم .

جواد ملاولی
سه شنبه 21 اردیبهشت 1389, 23:33 عصر
اگه زحمت بکشید و یک کپی از بانکتون (جداول + مقدار کمی اطلاعات ) اینجا بذارین شاید بتونم کمکی بکنم.
یه چیزایی تو ذهنم هست که اول باید روی جداول تست کنم .
خیلی ممنونم، ولی متاسفانه بانک رو نمی تونم اینجا بذارم.

جواد فلاح
چهارشنبه 22 اردیبهشت 1389, 10:23 صبح
این مشکل فقط با پرس و جو ها قابل حل است و ربطی به Master/Detail نداره

mehdimdp
چهارشنبه 22 اردیبهشت 1389, 22:18 عصر
خیلی ممنونم، ولی متاسفانه بانک رو نمی تونم اینجا بذارم.

فکر کنم crosstab query کار شما رو راه بندازه
من تاحالا این کار رو نکردم ولی در اکسس این نوع کوئری رو مشاهده کردم.
یه سر به اینجاها بزن شاید به دردت بخوره :
http://www.blueclaw-db.com/download/crosstab_query.htm
http://www.access.qbuilt.com/html/crosstab_queries.html

جواد ملاولی
پنج شنبه 23 اردیبهشت 1389, 11:55 صبح
فکر کنم crosstab query کار شما رو راه بندازه
من تاحالا این کار رو نکردم ولی در اکسس این نوع کوئری رو مشاهده کردم.
یه سر به اینجاها بزن شاید به دردت بخوره :
http://www.blueclaw-db.com/download/crosstab_query.htm
http://www.access.qbuilt.com/html/crosstab_queries.html
آقا مهدی دستت درد نکنه؛ دقیقا همین بود که می خواستم. درست شد.