PDA

View Full Version : حرفه ای: ایجاد یک select Query پیچیده و سنگین ؟



mrsalam
شنبه 21 فروردین 1389, 12:28 عصر
Please Delete it

AminSobati
شنبه 21 فروردین 1389, 13:25 عصر
دوست عزیزم،
نحوه تعریف جعبه کمی مبهمه. اگر هر ID در جدول، یک جعبه رو توصیف میکنه، در حقیقت شما x,y,z فقط یک نقطه رو ارائه کردین. اگر این جعبه دارای حجم هست، باید نقاط بیشتری ازش داشته باشیم

mrsalam
شنبه 21 فروردین 1389, 13:37 عصر
به دلیل اینکه جعبه ها حجمی یکسان دارند، نیازی به معرفی سایر نقاط نیست.
اگه ممکنه query ارائه دهید

محمد سلیم آبادی
شنبه 21 فروردین 1389, 16:29 عصر
دوست عزیزم،
نحوه تعریف جعبه کمی مبهمه. اگر هر ID در جدول، یک جعبه رو توصیف میکنه، در حقیقت شما x,y,z فقط یک نقطه رو ارائه کردین. اگر این جعبه دارای حجم هست، باید نقاط بیشتری ازش داشته باشیم
سلام،
دقیقا حق باشماست. چرا که یک جعبه دارای 8 راس (Vertex/Node) هست. با داشتن تنها سه پارامتر X,Y,Z تنها ما مختصات یک نقطه از فضا رو داریم.

mrsalam
شنبه 21 فروردین 1389, 16:40 عصر
وای!!!!!!!!!!!!!!!!!:گریه:
چرا من نمی تونم منظورم رو برسونم!
دوستان اصلا فکر کنید بجای جعبه ، منظورم یک نقطه در فضا است یا اینکه تصور کنید یک نقطه به اندازه یک جعبه است .
لطفا فقط به مثال توجه کنید...
با این حال چه Query می شه نوشت؟

Rejnev
شنبه 21 فروردین 1389, 16:58 عصر
سلام





SELECT a.code
FROM box AS a
WHERE (a.z > 1) AND ((a.z - 1) NOT IN
(SELECT b.z
FROM box AS b
WHERE (a.x = b.x) AND (a.y = b.y)))

--
--
--
--

محمد سلیم آبادی
شنبه 21 فروردین 1389, 17:12 عصر
وای!!!!!!!!!!!!!!!!!:گریه:
چرا من نمی تونم منظورم رو برسونم!
دوستان اصلا فکر کنید بجای جعبه ، منظورم یک نقطه در فضا است یا اینکه تصور کنید یک نقطه به اندازه یک جعبه است .
لطفا فقط به مثال توجه کنید...
با این حال چه Query می شه نوشت؟

به تصویر زیر دقت کنید. این دقیقا همون نقاطی هست که در فضا انتظار دارین.

بحث اینجاست که از هر صفحه ای (مثل X یا Y یا Z) میشه این مساله رو بررسی کرد.
مثلا از صفحه ی Y رو محور بحثمون قرار بدیم نقاط 1و2و3و5 نقاطی هستند که در زیر آنها نقطه ای قرار نداره.

http://www.barnamenevis.org/forum/attachment.php?attachmentid=46855&stc=1&d=1270905105

Rejnev
شنبه 21 فروردین 1389, 17:26 عصر
بحث اینجاست که از هر صفحه ای (مثل X یا Y یا Z) میشه این مساله رو بررسی کرد.
مثلا از صفحه ی Y رو محور بحثمون قرار بدیم نقاط 1و2و3و5 نقاطی هستند که در زیر آنها نقطه ای قرار نداره.


ایشون گفتن که منظورشون زیر جعبه هست. که در حالت عادی منظور از زیر همیشه نسبت به z هاست.
دو تا مثال هم زدن که اگه دقت کنید تنها توی z ها با هم اختلاف دارن.
مثلا در عکس، id 5 مشخص شده که z ش 3 بار بیشتر از id 4 در همون x , y هست.
یا مثال box1,box2 هم تنها در صورتی میشه فهمید که جعبه دو زیرش خالیه که ما نسبت به z ها فرض کنیم.

محمد سلیم آبادی
شنبه 21 فروردین 1389, 17:36 عصر
ممنون از توضیحاتتون. پس روی این حساب. کافیه بر اساس X,Y گروه بندی کنیم و MAX مقدار Z رو بدست بیاریم:
SELECT B.*
FROM (SELECT X, Y, MAX(Z)
FROM Box
GROUP BY X, Y) AS D
INNER JOIN Box AS B
ON B.X = D.X
AND B.Y = D.Y
AND B.Z = D.Z;

AminSobati
شنبه 21 فروردین 1389, 18:52 عصر
وای!!!!!!!!!!!!!!!!!:گریه:
چرا من نمی تونم منظورم رو برسونم!
دوستان اصلا فکر کنید بجای جعبه ، منظورم یک نقطه در فضا است یا اینکه تصور کنید یک نقطه به اندازه یک جعبه است .
لطفا فقط به مثال توجه کنید...
با این حال چه Query می شه نوشت؟

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

محمد سلیم آبادی
یک شنبه 22 فروردین 1389, 03:22 صبح
خیلی از کاربران تقصیری ندارن. تصور می کنند اون مشکلی که دارند رو می تونند به سادگی بیان کنند. البته هرچی تجربه بیشتری در جواب گویی به مشکلات کاربران داشته باشیم می تونیم پاسخ های دقیق تری رو حدس بزنیم. اینجور مواقع بهتره، پاسخ دهنده با صبوری تاپیک رو دنبال کنه تا به جواب برسه مثل این تاپیک: گروه بندی رکوردها (http://www.barnamenevis.org/forum/showthread.php?t=213185)

mrsalam
یک شنبه 22 فروردین 1389, 09:56 صبح
بسیار متشکرم
در اولین فرصت Query های پیشنهادی دوستان را مطالعه خواهم نمود و نتیجه را اعلام خواهم کرد.

msalim
از ایکنه سوالم را کامل نپرسیدم از همه دوستان معذرت خواهی می کنم...

mrsalam
یک شنبه 22 فروردین 1389, 10:59 صبح
محمد باقریان عزیز و دوستان دیگر عنایت داشته باشند به مثال
هر Box یک ردیف است ولی شما هر کدام از Box ها را یک table تصور کردین
باز هم متشکرم

Rejnev
یک شنبه 22 فروردین 1389, 11:34 صبح
محمد باقریان(باقرانی) عزیز و دوستان دیگر عنایت داشته باشند به مثال
هر Box یک ردیف است ولی شما هر کدام از Box ها را یک table تصور کردین
باز هم متشکرم

دست شما درد نکنه دیگه!:قهقهه:
هر باکس یک جدول!!! واقعا فکر میکنی همچین کاری کردیم؟
یعنی فکر میکنی ما برای هزار تا باکس هزار تا جدول درست میکنیم!
اگه یکم در مورد alias و نام مستعار و ساب کوئری مطالعه بفرمایید این حرف رو نمیزنید.
بهتره تمرینات دانشحویی خودتون رو سعی کنید خودتون حل کنید(لا اقل من اینجوری فکر میکنم)

mrsalam
دوشنبه 23 فروردین 1389, 10:26 صبح
بنده پروژه ای در سطح بین المللی طراحی نمودم و این Query را برای آن می خواستم.
متاسفانه همه پاسخ ها مرا به جواب نرساند و در مورد BOX و Table باید بگویم که به دلیل اینکه 2 شبانه روز نخوابیده بودم، به اشتباه برداشت کردم و بدین وسیله از همه معذرت می خوام .
راستی محیط برنامه رو هم اینجا میزارم دوستان ببینند

تماس بگیرید
نظرات(Queryٌ) دیگری هست؟
البته من این کار رو بدون Query و با استفاده از یک ماتریس انجام دادم و نتیجه گرفتم ولی می خواستم از Store Procedure می خواهم انجام بدم
منتظر شما هستم
با تشکر.

Rejnev
دوشنبه 23 فروردین 1389, 10:55 صبح
عزیز من اون کوئری که نوشتم کار میکنه.
یک جدول هم دقیقا مثل جدول خودت که در پست اول نوشتی ایجاد کردم و برای اون کوئری رو ساختم.
شما هم کوئری رو اجرا کن و اگه اشتباه بود بگو درستش کنم.
اگر هم با دستورات sql آشنایی نداری بقیه هم هر پاسخی بدن شما نخواهی تونست جوابت رو از اونها پیدا کنی

محمد سلیم آبادی
دوشنبه 23 فروردین 1389, 15:47 عصر
1: فایل های تصویری رو در همان پست ضمیمه کنید و از لینکش استفاده کنین، چون این تصاویری که در پستتاتون قرار دادین مشاهده نمیشن.

2: Query که در پست 9 قرار دادم رو اجرا کردین؟ آیا از نظر منطقی جواب نداد یا Error داد. اگر Error داده باید برای عبارت MAX یک نام مستعار Z تعریف کنین.

3: چطور پروژه ای در حد بین الملی می نویسین ولی به طور دقیق یک نمونه از داده ها و نتیجه ی مورد نظرتون رو پست نمی کنید؟ (قبلا هم که تصویر پست اول مشخص بود بازم نتیجه رو مشخص نکردین بودین!)

4: به پرسشی که در پست شماره 7 مطرح کردم پاسخ ندادین. چرا؟

5: مگه در پست های پیشین توافق نکردیم که به جای Box از "نقطه" استفاده کنیم؟ شما هنوز دارین حرف Box رو میزنید.

6: به داد های نمونه ی زیر توجه کنید، ببینید آیا نتیجه ی بدست آمده همون نتیجه ای است که مد نظر داشتین؟

declare @t table
(x int, y int, z int, id int)
insert into @t values(1,1,1,1),(1,1,2,2),(1,1,3,3),(1,2,1,4),(1,2 ,4,5)
SELECT * FROM @t
/* Raw Data
x y z id
----------- ----------- ----------- -----------
1 1 1 1
1 1 2 2
1 1 3 3
1 2 1 4
1 2 4 5
*/
SELECT B.*
FROM (SELECT X, Y, MAX(Z) AS Z
FROM @t
GROUP BY X, Y) AS D
INNER JOIN @t AS B
ON B.X = D.X
AND B.Y = D.Y
AND B.Z = D.Z;
/* -- Result
x y z id
----------- ----------- ----------- -----------
1 2 4 5
1 1 3 3
*/


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

محمد سلیم آبادی
دوشنبه 23 فروردین 1389, 16:22 عصر
سلام





SELECT a.code
FROM box AS a
WHERE (a.z > 1) AND ((a.z - 1) NOT IN
(SELECT b.z
FROM box AS b
WHERE (a.x = b.x) AND (a.y = b.y)))


--
--
--
--


اول از همه بهتر نیست کدتتون رو به این استیل در بیارین؟



SELECT a.code
FROM box AS a
WHERE a.z > 1
AND (a.z - 1) NOT IN
(SELECT b.z
FROM box AS b
WHERE a.x = b.x
AND a.y = b.y);


چرا اینقدر از پرانتز استفاده کردین؟

در ضمن من منظورتو از اینکه محور رو Z قرار داده، از محور Z- زیر رو برداشت کردم! روی این حساب کوئریم یک نتیجه ی دیگه می ده.

البته اینم بگم که شاید منظور کاربر این نباشه که نقطه(یا جعبه) دقیقه یک خونه پایین تر از جعبه ی دیگه باشه. شاید منظورش این باشه که اصلا جعبه ای در پایین اون وجود نداشته باشه!

Rejnev
دوشنبه 23 فروردین 1389, 23:32 عصر
-- Result
x y z id
----------- ----------- ----------- -----------
1 2 4 5
1 1 3 3

سلام
عدد سه نباید در خروجی بیاد چون آیدی 2 با یک واحد اختلاف(z=2) در زیر اون قرار داره. در نتیجه 3 روی هوا نیست


اول از همه بهتر نیست کدتتون رو به این استیل در بیارین؟من اینها رو ننوشتم. sql Express محیط VS خودش کدها رو فرمت میکنه.
به هر حال قبول دارم یکمی بی ریختن. من خودم بیشتر از هر کسی که میشناسم نسبت به مرتب بودن کدها حساسم. حتی به درجه وسواس هم رسیدم. مثلا حاضر نیستم یک space توی یک خط کدم به صورت اضافی و غیر استاندارد اضافه بشه.


البته اینم بگم که شاید منظور کاربر این نباشه که نقطه(یا جعبه) دقیقه یک خونه پایین تر از جعبه ی دیگه باشه. شاید منظورش این باشه که اصلا جعبه ای در پایین اون وجود نداشته باشه!قسمت قرمز رنگ هدفه. یعنی نقاطی که روی فضا معلقند. و از پایین چیزی نیست نگهشون داره و به طرف زمین(محور z) سقوط خواهند کرد.
در result شما 3 سقوط نمیکنه. چون 2 زیرشه. ولی 5 چرا.

mrsalam
سه شنبه 24 فروردین 1389, 09:11 صبح
حسته نباشید جمیعا :کف:
برای شفافیت بیشتر صورت مسئله یک مثال دیگه ارائه میدم خدمت دوستان :

http://www.2shared.com/file/12560690/d302a/xx_online.html

mrsalam
سه شنبه 24 فروردین 1389, 14:43 عصر
آقای باقرانی عزیز ، پاسخ شما نزدیکترین نتایج را ارائه کرد،سپاس گذارم.
از تمامی دوستان که وقت خودشان رو در اختیار حقیر گذاشتن و به نوعی سعی در همکاری داشتن نیز صمیمانه تشکر می کنم.

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