2016-04-11 14 views
0

Hiç başarılı olamadım ve baktım, denedim ve denedim. Kullanıcıları belirli bir uzaklık aralığında görüntülemek için kullandığım bir sorgum var. Harika çalışıyor, ancak tüm kullanıcıları users tablomdan döndürüyor ve sadece account_type'daki değerin '1' değerine eşit olduğu kullanıcıları döndürmesini istiyorum. Yani temelde farklı türde hesap türleri kullanıcılarımı paylaşıyor ve bu sayfada sadece bir kullanıcı tipinin görüntülenmesini istiyorum. Hiç bilmediğim aynı tabloya katılmak da dahil olmak üzere her türlü şeyi denedim ve zaten işe yaramadı. Temel olarak, bu sorguda nerede 'account_type' adlı sütunu kontrol etmek için bir 'WHERE' yan tümcesi ekleyebileceğimi bilmek isterim.Boylam enlem sorgusu ancak sadece aynı tablodaki sütunla eşleşen satırlar

İşte benim fonksiyonel sorgu var:

: Sadece account_type = 1, hiçbir başarı ile aşağıdakilerden birçok farklı varyasyonlar yaparak çalıştı sahip olduğu tablodan kullanıcı döndürmek istediğimiz için

SELECT `user_id`, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos(radians(lng) - radians('".$lng."')) + sin(radians('".$lat."')) * sin(radians(lat)))) AS distance FROM users HAVING distance <= '".$dist."' ORDER BY distance 

Bu konuyu daha fazla kirletmeyecek olsam da, başka bir çok kişi için

SELECT `user_id`, `account_type`, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos(radians(lng) - radians('".$lng."')) + sin(radians('".$lat."')) * sin(radians(lat)))) AS distance FROM users ***WHERE `account_type` = '1'*** HAVING distance <= '".$dist."' ORDER BY distance 

SELECT `user_id`, `account_type`, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos(radians(lng) - radians('".$lng."')) + sin(radians('".$lat."')) * sin(radians(lat)))) AS distance FROM users HAVING distance <= '".$dist."' ***WHERE `account_type` = '1'*** ORDER BY distance 

. Birisi bana neyi yanlış yaptığımı söyler mi? Teşekkürler

+0

Sadece "WHERE" işlevini sadece bunun gibi kullanmayı deneyin. "SELECT ......... FROM kullanıcılarından WHERE account_type = '1' VE mesafe <=" ". $ Dist." 'SIRA BOŞ. " – rhavendc

+0

Teşekkürler. Bu yüzden ne dediğinizi denedim, SELECT 'user_id', 'account_type', (3959 * acos (cos (radyanlar ('". $ Lat. "')) * Cos (radyanlar (lat)) * cos (radyanlar (lng)) - radyanlar ('". $ lng."')) + sin (radyanlar ('". $ lat."')) * günah (radyan (lat)))) Uzaklık kullanıcıları olarak NEREDE hes_type = '1' VE mesafe <= '". $ dist."' SİPARİŞ VEREBİLİR ve Mysql hatası alıyorum – user1000665

+0

Sorunuz "SELECT ......... FROM kullanıcılarından WHERE account_type = '1' HAVING mesafe <= '". $ dist "Mesafeden sipariş" 'çalışır? İşe yaramalı. 'WHERE' deyimini' HAVING''ten önce koymak doğrudur ve 'GROUP BY' olmadan' HAVING' kullanmakta sorun yoktur. ** Belki de 1/hesap sahibinin/1'inin ve tablonuzda verilen mesafeden daha az bir kullanıcı yok ** – rhavendc

cevap

0

@ rhavendc doğruydu. Ben bir moronum. Bunu test etmek için oluşturduğum hesapta uzak bir yer kullandım ve sitemde 20'den fazla test hesabı olsa da, test hesabımın eşleşen hesabın 100milelikte hiçbiri hesaba katılmıyordu. '

yüzden fark kez sadece "((radyan user_id, (3959 * Acos SEÇ (cos doğru bir sonuç

$ qry = almak için bu sorguyu kullanmak 2 saniye sürdü işte". lat $. "')) * cos (radyanlar (lat)) * cos (radyanlar (lng) - radyanlar ('". $ lng. "')) + sin (radyanlar ('". $ lat. "')) * günah (radians (lat)))) Kullanıcılardan uzaklığı DOĞRUDAN hesabı_type = '1' HAVING mesafesi < = ''. $ dist.

Herkesin girdisi için teşekkürler. Aptallığım için özür dilerim.

İlgili konular