الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال على استعلام

بدأه ورق خسرانه في 29 مارس 2014 · 5 رد · 464 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

 السلام عليكم اخواني الاعضاء والمشرفين 

 

 اخواني لدي جدول فيه بيانات المدارس

Schools

ويحتوي على البيانات التالية 

 

idscholl رقم المدرسة

SchoolName اسم المدرسة

MobilSchool  رقم الهاتف

Latitude خط العرض

Longitude خط الطول

 

الان اريد ان اعمل استعلام بحيث يبحث لي عن المدارس القريبة من مدرستي حسب خطوط الطول والعرض مع العلم ان جميع بيانات المدارس مخزنه في الجدول مع خطوط الطول العرض لكل مدرسة 

 اريد ان يكون ناتج الاستعلام مرتب من الاقرب لي الى الابعد 

 كيف اصيغ الاستعلام ولكم جزيل الشكر 

 

ملاحظة : خطوط الطول والعرض تم اخذها من Google Map

#3

 مششكور اخي العزيز .. على المساعدة لكن لم استطع فهم الطريقة لاني ضعيف شوية بالانجليزي .. ياليت لو تعملي مثال بسيط عليه ولك جزيل الشكر 

#4

اولا نقوم بانشاء وظيفة تحسب المسافة بين نقطتين

CREATE FUNCTION [dbo].[udfDistanceBetween2points]
(
	@nMainX decimal(18, 2),
	@nMainY decimal(18, 2),
	
	@nPointX decimal(18, 2),
	@nPointY decimal(18, 2)
)
RETURNS decimal(18, 2)
AS
BEGIN
  declare @dx   decimal(18, 2)=@nMainX- @nPointX        --horizontal difference 
  declare @dy   decimal(18, 2)= @nMainY - @nPointY        --vertical difference 
  declare @dist decimal(18, 2)= sqrt( @dx*@dx + @dy*@dy ) --distance using Pythagoras theorem
  return @dist
END

ثانيا انشاء اجراء مخزن ياتي بالمدارس مرتبة بالاقرب

CREATE PROCEDURE [dbo].[spGetDistanceSchools]
		@idscholl int
AS
BEGIN
	declare @nMainX decimal(18, 2)
	declare @nMainY decimal(18, 2)
	
	--get points main school
	SELECT  top(1)  
			@nMainX=Latitude, 
			@nMainY=Longitude
	FROM    
			dbo.Schools
	WHERE   
			idscholl = @idscholl
	
	--get schools Distance order by Distance A->Z
	SELECT  
			idscholl, 
			SchoolName, 
			MobilSchool,
			dbo.udfDistanceBetween2points(@nMainX,@nMainY,Latitude,Longitude) as nDistance
	FROM    
			dbo.Schools
	WHERE   idscholl <> @idscholl
	order by 4
END

ثم اسخدام الاجراء بارسال رقم مدرستي

exec spGetDistanceSchools 2

بالتوفيق

1
#5

مششكور اخي 

KARIMSOFT 

جاري التجربة .. ولك جزيل الشكر والتقير ان شاء الله في ميزان حسناتك اخي 

#6
KARIMSOFT كتب:

اولا نقوم بانشاء وظيفة تحسب المسافة بين نقطتين

CREATE FUNCTION [dbo].[udfDistanceBetween2points]
(
	@nMainX decimal(18, 2),
	@nMainY decimal(18, 2),
	
	@nPointX decimal(18, 2),
	@nPointY decimal(18, 2)
)
RETURNS decimal(18, 2)
AS
BEGIN
  declare @dx   decimal(18, 2)=@nMainX- @nPointX        --horizontal difference 
  declare @dy   decimal(18, 2)= @nMainY - @nPointY        --vertical difference 
  declare @dist decimal(18, 2)= sqrt( @dx*@dx + @dy*@dy ) --distance using Pythagoras theorem
  return @dist
END

ثانيا انشاء اجراء مخزن ياتي بالمدارس مرتبة بالاقرب

CREATE PROCEDURE [dbo].[spGetDistanceSchools]
		@idscholl int
AS
BEGIN
	declare @nMainX decimal(18, 2)
	declare @nMainY decimal(18, 2)
	
	--get points main school
	SELECT  top(1)  
			@nMainX=Latitude, 
			@nMainY=Longitude
	FROM    
			dbo.Schools
	WHERE   
			idscholl = @idscholl
	
	--get schools Distance order by Distance A->Z
	SELECT  
			idscholl, 
			SchoolName, 
			MobilSchool,
			dbo.udfDistanceBetween2points(@nMainX,@nMainY,Latitude,Longitude) as nDistance
	FROM    
			dbo.Schools
	WHERE   idscholl <> @idscholl
	order by 4
END

ثم اسخدام الاجراء بارسال رقم مدرستي

exec spGetDistanceSchools 2

بالتوفيق

 

-------------------------

 مشكور اخي  العزيز لقد قمة بالتجربة وتم حل المشكلة بنجاح ... لك جزيل الشكر والتقدير على المساعدة

+1

مواضيع مشابهة