ورود

View Full Version : سرعت در جستحو db



saed2006
جمعه 22 شهریور 1387, 17:55 عصر
با سلام
من برای پیدا کردن مین و ماکس های یک حدول از کد زیر استفاده کردم:
SQL = "SELECT MIN(xryzcoord)"
SQL = SQL & " From Grid Lines"
SQL = SQL & " WHERE axisdir Like 'X'"
rststr.Open SQL, constr
min_x = rststr.Fields.Item(0).Value
rststr.Close
که به درستی کار میکنه حالا مشکل اینه که واسه پیدا کردن هر کدوم محبورم جدول رو باز و بسته کنم
که سرعتو حیلی کاهش میده
از عزیزان می خواهم اگه پیشنهاد بهتری دارند بفرمایند
مرسی

Mbt925
یک شنبه 24 شهریور 1387, 13:07 عصر
اگه منظورتون از هرکدوم Min و Max هست، می تونید هر دو رو با هم بیارید:


SELECT MIN(xryzcoord) AS MinX,MAX(xryzcoord) AS MaxX

saed2006
یک شنبه 24 شهریور 1387, 14:20 عصر
moshkel ine ke bayad where ro taghir bedam

Rambod
یک شنبه 24 شهریور 1387, 14:40 عصر
ميتونيد از دستور Select زير استفاده كنيد.




SELECT Distinct (SELECT MIN(field_name) FROM table_name WHERE where_condition) as [Min] , (SELECT MAX(field_name) FROM table_name WHERE where_condition) as [Max]
FROM table_name

saed2006
دوشنبه 25 شهریور 1387, 11:05 صبح
این دستور کار نکرد

Mbt925
دوشنبه 25 شهریور 1387, 11:36 صبح
سوالتون رو کامل نپرسیدید.

شما میگید مشکل با Where هست، خوب چه مشکلی ؟

Rambod
دوشنبه 25 شهریور 1387, 11:41 صبح
این دستور کار نکرد
من دستور تست شده رو اينجا گذاشتم. يعني ايراد از دستور نيست، احتمالاً شما ازش درست استفاده نكرديد.

saed2006
دوشنبه 25 شهریور 1387, 11:42 صبح
من میخوام برای هر x و y دو مقدار min و max رو بدست بیارم
بنابراین باید شرط where رو واسه هرکدوم جداگونه بنویسم
ایا دستوری که rambod دادند قابل اجرا هست و اگر نه پس چه باید کرد؟

اقای rambod من اینو نوشتم:
SQL = "SELECT Distinct (select max(xryzcoord),min(xryzcoord)"
SQL = SQL & " From Grid Lines"
SQL = SQL & " WHERE axisdir Like 'X')"
SQL = SQL & "( , (SELECT max(xryzcoord),MIN(xryzcoord)"
SQL = SQL & " From Grid Lines"
SQL = SQL & " WHERE axisdir Like 'Y')"
rststr.Open SQL, constr

Mbt925
دوشنبه 25 شهریور 1387, 11:50 صبح
شما باید بصورت زیر عمل کنید.



SELECT Name,MIN(xryzcoord) AS MinX,MAX(xryzcoord) AS MaxX Group By Name


نام فیلدی که X ها و Y ها درش قرار دارن، جایگزین Name کنید.

Rambod
دوشنبه 25 شهریور 1387, 12:01 عصر
ميتونيد به روش زير هم عمل كنيد:



SELECT MAX(xryzcoord),MIN(xryzcoord)
FROM Grid Lines
WHERE axisdir LIKE 'X'

UNION

SELECT MAX(xryzcoord),MIN(xryzcoord)
FROM Grid Lines
WHERE axisdir LIKE 'Y'

saed2006
دوشنبه 25 شهریور 1387, 12:03 عصر
اینو نوشتم
SQL = "select axisdir,max(xryzcoord),min(xryzcoord)"
SQL = SQL & " From [Grid Lines]"
SQL = SQL & " Group By axisdir"
و تنها x ها برگردانده میشوند
تصویر table در زیر

Mbt925
دوشنبه 25 شهریور 1387, 12:07 عصر
دستور درسته، اگه نمونه ای از برنامتون در دسترسه قرار بدید تا مشکلش بررسی بشه.

saed2006
دوشنبه 25 شهریور 1387, 12:09 عصر
RAMBOD
دستور شما تنها متغییر های Y را برمیگردونه

Rambod
دوشنبه 25 شهریور 1387, 12:12 عصر
باور كن دستورش مشكلي نداره. Union يعني جمع دو تا Select رو برميگردونه. البته من تو SQL Server تست ميكنم. نميدونم تو Access جواب ميده يا نه...

Mbt925
دوشنبه 25 شهریور 1387, 12:14 عصر
روش دوستمون خوبه ولی روش پویایی نیست.
اگه مقدار جدیدی اضافه بشه باید کد برنامه هم بروز بشه!

اگه مقادیر ثابت هستن می تونید از این روش استفاده کنید.

saed2006
دوشنبه 25 شهریور 1387, 12:32 عصر
اقایان rambod و mbt925
این فایل کاملش است

Mbt925
دوشنبه 25 شهریور 1387, 12:48 عصر
دستوری که بهتون دادم کاملا درست بود.

نمونه اصلاح شده:

Rambod
دوشنبه 25 شهریور 1387, 12:50 عصر
دستور بنده هم درست بود. فقط يه اشكال كوچيك داشت و اونم اين بود كه چون در نام جدول، فاصله وجود داشت بايد از [] استفاده مي‌شد. يعني كد نهايي به اين شكل هست:




SELECT MAX(xryzcoord),MIN(xryzcoord)
FROM [Grid Lines]
WHERE axisdir LIKE 'X'

UNION

SELECT MAX(xryzcoord),MIN(xryzcoord)
FROM [Grid Lines]
WHERE axisdir LIKE 'Y'

saed2006
دوشنبه 25 شهریور 1387, 13:15 عصر
مشکل این بود که توس watch تنها متغیر x رو نشون میداد
ممنون