[]

MySQL sorusu

selam arkadaşlar. çıkamadım içinden.

şimdi amacım şu;

kullanıcının mevcut koordinatını alacağım.
ve mysql'den de, bu koordinata en yakın firmaları harita üstünde listeleteceğim.

Ancak şöyle bir durum var; firmaların hiç koordinat girmemiş olma ihtimali var. ben onları, koordinat girmişlerin altına atmak istiyorum her halükarda. yani mesafe yakın da uzak da olsa önce koordinatı girili firmalar sıralanacak. sonra değeri null olanlar.

firma ile kullanıcı arasındaki mesafeyi çok kabataslak hesaplayıp ona göre ORDER yapıyorum.
ama bu durumda NULL değerleri 0 aldığı için, en yakınlar NULL lar arasından geliyor.

bu meseleyi nasıl çözebilirim sizce?

aha örnek query: (değiştirdim biraz anlaşılır olması için, traşladım)

select
ABS(ABS(fm.firmaX-'41.0708726')-ABS(fm.firmaY-'28.995797099999997')) as mesafe,
fm.firmaId,
fm.firmaTitle,
fm.firmaDesc,
fm.firmaLogo,
fm.firmaYil,
fm.firmaNo,
fm.firmaIl,
fm.firmaIlce

from (select * from firma) as fm
LEFT JOIN firmakategori as fk ON fk.firmakategoriId = fm.firmakategoriId order by fm.firmaX desc, mesafe limit 0, 4

 
.... ABS(ISNULL(fm.firmaX, 10000) - '41.0708726') ....

ISNULL mssql de var, mySql de de vardır diye tahmin ediyorum.
  • ravenudon  (12.07.17 10:01:11 ~ 10:01:43) 
daha önce kullanmadım isnull'u.

buradaki fonksiyonu nolmuş oluyor acaba?
  • tchuck  (12.07.17 10:23:04) 
Fromdan sonra where fm.x not null ekle


  • beriberi  (12.07.17 10:46:37) 
ISNULL değil de IFNULL(fm.firmaX, 12345) şeklinde kullanabilirsin.

Eğer fm.firmaX değeri NULL gelirse 12345 çıkar fonksiyondan, değilse kendi değeri çıkar zaten.
  • chicha  (12.07.17 10:56:37) 
Benzer bir sql sorgusu gelistirmistim. databasede veri sayisi 10.000 sayisini gectikten sonra cok yavasladi. Cunku mesafe hesaplama fonksiyonu 10.000 data icin ayri ayri calismali, merkez noktasi da hep degistigi icin de mysql cache de bir anlam tasimiyor. ornegin bu verdigin sql sorgusunda istanbuldaki bir kisiye olan uzakligi almak istediginde erzurumdaki bir data icin de mesafe hesaplama formulu calisir. Bu da ekstra zaman kaybi. Data sayisi artinca performans cok kotu olacaktir ve performans kaybi katlanarak artacaktir.

Cozum olarak ilk basta sehir olarak filtreleyelim dedik. ornegin istanbul merkezli arama yapinca ilk once istanbuldaki datalari filtreleyip, sadece o datalarin mesafesini hesaplayalim dedik. Boylce baska sehirlerdeki datalara olan mesafeyi hesaplamamis olduk. Ama bu durumda da tuzladan(istanbul) biri arama yaptiginda gebzedeki(izmit) sonuclar cikmadi dogal olarak. Bu cozum mantikli degildi ve eledik.

Onun yerine en verimli cozum su oldu, ornegin latitude:45 longitude:75 olan bir yerin mesafesini hesaplaman icin sql de "where" blogunun icine su sekilde filtre eklersen

and latitude > 40.00
and latitude < 50.00
and longitude > 70.00
and longitude < 80.00

yani sadece tum dataya olan mesafeyi hesaplemk yerine belli bir kare alan icindekilerin mesafesini hesaplar isen cok daha hizli sonuc verecektir sql. biz bu sayede ABD icinde lokasyonlarin mesafe hesaplamasini sql optimizasyondan once 120 saniyede aldigimiz sonucu 6 saniye kadar dusurduk.

Hele bir de rotaya olan uzakligi hesaplamak istediginde bu formul de cok yeterli gelmeyecktir, bu durumda bunun gibi Route Boxer js-tutorial.com ve bu tez gibi kaynaklara ihtiyac duyabilirsin ieeexplore.ieee.org
  • emrahday  (12.07.17 13:02:59) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.