কোনও মাইএসকিউএল নির্দিষ্ট উত্তর নয়, তবে এটি আপনার স্ক্যাল স্টেটমেন্টের কার্যকারিতা উন্নত করবে।
আপনি কার্যকরভাবে যা করছেন তা সারণীর প্রতিটি পয়েন্টের দূরত্ব গণনা করা হচ্ছে এটি কোনও নির্দিষ্ট বিন্দুর 10 ইউনিটের মধ্যে রয়েছে কিনা তা দেখার জন্য।
আপনি এই স্কয়ারটি চালানোর আগে আপনি যা করতে পারেন তা হল চারটি পয়েন্ট যা একটি দিকে 20 বাক্স ইউনিট করে একটি বিন্দু তৈরি করবে, আপনার পয়েন্টটি কেন্দ্রে রাখবে। (এক্স 1, ওয়াই 1) । । (x4, y4), যেখানে (x1, y1) হয় (প্রদত্ত দীর্ঘ + 10 ইউনিট, প্রদত্ত ল্যাট + 10 ইউনিট)। । । (প্রদত্তলং - 10 ইউনাইটস, প্রদত্ত ল্যাট -10 ইউনিট)।
আসলে, আপনার কেবল দুটি পয়েন্ট প্রয়োজন, উপরের বাম এবং নীচে ডান তাদের কল করুন (এক্স 1, ওয়াই 1) এবং (এক্স 2, ওয়াই 2)
এখন আপনার এসকিউএল স্টেটমেন্টটি আপনার প্রদত্ত বিন্দু থেকে অবশ্যই 10u এর বেশি সারিগুলি বাদ দেওয়ার জন্য এই পয়েন্টগুলি ব্যবহার করে, এটি অক্ষাংশ এবং দ্রাঘিমাংশগুলিতে সূচীগুলি ব্যবহার করতে পারে, সুতরাং আপনার বর্তমানের তুলনায় দ্রুততার আদেশ হবে।
যেমন
select . . .
where locations.lat between X1 and X2
and locations.Long between y1 and y2;
বাক্সের পদ্ধতির ক্ষেত্রে মিথ্যা ধনাত্মকতা ফিরে আসতে পারে (আপনি প্রদত্ত বিন্দু থেকে> 10u বাক্সের কোণে পয়েন্টগুলি তুলতে পারেন), সুতরাং আপনাকে প্রতিটি পয়েন্টের দূরত্ব গণনা করতে হবে। তবে এটি আবার আরও দ্রুত হবে কারণ আপনি বাক্সের মধ্যে থাকা পয়েন্টগুলিতে পরীক্ষার জন্য পয়েন্টের সংখ্যা মারাত্মকভাবে সীমাবদ্ধ করেছেন।
আমি এই কৌশলটিকে "বাক্সের ভিতরে চিন্তাভাবনা" বলি :)
সম্পাদনা: এটি কি একটি এসকিউএল স্টেটমেন্টে রাখা যেতে পারে?
দুঃখিত, আমার মাইএসকিএল বা পিএইচপি কীভাবে সক্ষম তা সম্পর্কে আমার কোনও ধারণা নেই। আমি জানি না যে চারটি পয়েন্ট তৈরি করার জন্য সেরা জায়গাটি কীভাবে, বা কীভাবে পিএইচপিএইচএসএইচএল কোয়েরিতে সেগুলি দেওয়া যেতে পারে। যাইহোক, একবার আপনার চারটি পয়েন্ট হয়ে গেলে, আপনার নিজের এসকিউএল বিবৃতিটি আমার সাথে একত্রিত করার কোনও কারণ নেই।
select name,
( 3959 * acos( cos( radians(42.290763) )
* cos( radians( locations.lat ) )
* cos( radians( locations.lng ) - radians(-71.35368) )
+ sin( radians(42.290763) )
* sin( radians( locations.lat ) ) ) ) AS distance
from locations
where active = 1
and locations.lat between X1 and X2
and locations.Long between y1 and y2
having distance < 10 ORDER BY distance;
আমি জানি এমএস এসকিউএল-এর সাথে আমি একটি এসকিউএল স্টেটমেন্ট তৈরি করতে পারি যা চারটি ফ্লোট (এক্স 1, ওয়াই 1, এক্স 2, ওয়াই 2) ঘোষণা করে এবং "মুখ্য" নির্বাচনী বিবৃতিটির আগে সেগুলি গণনা করে, যেমন আমি বলেছিলাম, এটি করা যায় কিনা আমার কোনও ধারণা নেই মাইএসকিউএল। তবে আমি এখনও সি # তে চারটি পয়েন্ট তৈরি করতে এবং এসকিউএল কোয়েরিতে প্যারামিটার হিসাবে তাদের পাস করার জন্য ঝুঁকতে চাই।
দুঃখিত, আমি আরও সাহায্য হতে পারি না, যদি কেউ এর মাইএসকিউএল এবং পিএইচপি নির্দিষ্ট অংশের উত্তর দিতে পারে তবে এই উত্তরটি সম্পাদন করতে দ্বিধা বোধ করুন।