मुझे क्या चाहिए:
अलग-अलग निर्देशांक चुनने के लिए मुझे क्वेरी के अंदर किसी प्रकार का IF स्टेटमेंट लिखना होगा, if table1.business_id
, 1
के बराबर है।
उदाहरण के लिए:
table1
में से lng
और lat
फ़ील्ड चुनें if table1.business_id = 1
, अन्यथा, lng
और lat
फ़ील्ड चुनें table2
।
प्रश्न:
SELECT *,
(3959 * acos(
cos(radians('.$cords['result']['latitude'].')) *
cos(radians(lat)) * cos( radians(lng) -
radians('.$cords['result']['longitude'].')) +
sin(radians('.$cords['result']['latitude'].')) *
sin(radians(lat))
)) AS distance
FROM table1 INNER JOIN table2 ON table2.id = table1.business_id
WHERE type <> "industry" AND '.$query.'
HAVING distance < '.$radius.'
ORDER BY distance LIMIT 100
मैं यह कैसे काम कर सकता हूँ? तकनीकी रूप से सही क्वेरी कैसे लिखें?
किसी भी उत्तर के लिए धन्यवाद।
3 जवाब
आप CASE
कथन का उपयोग कर सकते हैं, या प्रवाह को नियंत्रित करने के लिए IF
कथन . विचार यह निर्धारित करना है कि किस तालिका से डेटा का उपयोग किया जाए:
IF(`table1`.`business_id` = 1, `table1`.`lat`, `table2`.`lat`)
lat
के सभी मौजूदा उपयोगों के स्थान पर रखा जाएगा (और long
के लिए भी यही)
SELECT *,
(3959 * acos(
cos(radians('.$cords['result']['latitude'].')) *
cos(radians(IF(`table1`.`business_id` = 1, `table1`.`lat`, `table2`.`lat`))) *
cos( radians(IF(`table1`.`business_id` = 1, `table1`.`lng`, `table2`.`lng`)) -
radians('.$cords['result']['longitude'].')) +
sin(radians('.$cords['result']['latitude'].')) *
sin(radians(IF(`table1`.`business_id` = 1, `table1`.`lat`, `table2`.`lat`)))
)) AS distance
FROM table1 INNER JOIN table2 ON table2.id = table1.business_id
WHERE type <> "industry" AND '.$query.'
HAVING distance < '.$radius.'
ORDER BY distance LIMIT 100
असंबंधित, ऐसा लगता है कि आप अपनी क्वेरी में मानों को जोड़ रहे हैं। बहुत सावधान रहें कि आप स्वयं को SQL इंजेक्शन हमलों के लिए नहीं खोल रहे हैं!
मुझे लगता है कि कई रूपांतरणों के साथ गणना, क्योंकि और पाप बल्कि भारी है।
मेरा सुझाव है कि पहले एक आयत पर चयन करें
where abs(latitude1-latitude2)<latdif
and abs(longitude1-longitude2)<longdif
फिर इसे अस्थायी तालिका, दृश्य या सबक्वायरी में उपयोग करें।
यह कारण का प्रश्न का पूर्ण उत्तर नहीं है।
'आप केस का उपयोग तब कर सकते हैं जब
select a, b,
case
when table1.business_id = 1
then 'Pick lng and lat fields from table1'
else 'pick lng and lat fields from table2'
end col1, clo2
from table1, table 2 where table1.id = table2.id
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।