2015-12-21 16 views
5

Tôi nhận được các viện trong vòng 10km với kết quả $. Nhưng tôi muốn có được các viện với tên khóa học có GATE. Tôi có thể làm cái này như thế nào? course_records có một khóa viện quốc tế trong các viện. Tôi không thể tham gia các bảng này. Mọi loại trợ giúp sẽ được đánh giá cao.Tham gia các bảng sử dụng khóa ngoài

$result=$conn->query("SELECT *, (6371 * acos(cos(radians($user_latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($user_longitude)) + sin(radians($user_latitude)) * sin(radians(latitude)))) AS distance FROM institutes HAVING distance < 10 ORDER BY distance LIMIT 0 , 10 "); 

mysql> select * from institutes;

+--------------+-------------------+---------------------+----------------+----------------------------------+-------------+--------+----------+-----------+ 
| institute_id | name    | email    | contact_number | address       | telephone | tut_id | latitude | longitude | 
+--------------+-------------------+---------------------+----------------+----------------------------------+-------------+--------+----------+-----------+ 
|   23 | Dhananjay Classes | [email protected] | 9999888877  | Palam dabri Road,Mahavir Enclave | 011-1234567 |  11 | 28.5892 | 77.0858 | 
|   24 | ffe    | [email protected]    | 323232   |         |    |  11 | 28.5667 | 77.2833 | 
+--------------+-------------------+---------------------+----------------+----------------------------------+-------------+--------+----------+-----------+ 

mysql> select * from course_records;

+-----------+------+--------------+-------+--------------+--------------------------+--------------------+---------------+-----------+---------+--------------+ 
| course_id | name | subject  | fees | num_students | num_students_per_teacher | month_of_admission | num_of_trials | commision | created | institute_id | 
+-----------+------+--------------+-------+--------------+--------------------------+--------------------+---------------+-----------+---------+--------------+ 
|   1 | GATE | CSE   | 10000 | 110   | 20      | January   | 3    | yes  | NULL |   23 | 
|   2 | NDA | all_subjects | 7000 | 50   | 20      | April    | 3    | yes  | NULL |   23 | 
|   3 | 12th | Math   | 2  | 90   | 20      |     | 2    |   | NULL |   23 | 
+-----------+------+--------------+-------+--------------+--------------------------+--------------------+---------------+-----------+---------+--------------+ 

Trả lời

3

thử nó với:

$result=$conn->query("SELECT 
i.name as inst_name, cr.name as course_name, 
(6371 * acos(cos(radians($user_latitude)) * cos(radians(i.latitude)) * cos(radians(i.longitude) - radians($user_longitude)) + sin(radians($user_latitude)) * sin(radians(i.latitude)))) AS distance 
FROM 
institutes i 
join course_records cr on i.institute_id = cr.institute_id 
where cr.name = 'GATE' 
HAVING 
distance < 10 ORDER BY distance LIMIT 0 , 10 "); 

bạn có thể thêm lĩnh vực nhiều hơn từ cả hai bảng như chọn lĩnh vực bằng cách sử dụng bí danh của bảng như cr.subject cho chủ đề khóa học từ course_records bảng.

+0

mã hoạt động sau khi thêm dấu phẩy, sau 'SELECT i.name dưới tên inst_name, cr.name là course_name' – tarun14110

+0

oh có để tôi cập nhật câu trả lời của mình –

3

Tôi không chắc chắn cách bạn tính toán khoảng cách và tôi sẽ không đi vào chi tiết của nó. Vui lòng bỏ qua công thức của bạn cho nó. Giả sử rằng bạn sửa nó, hãy thử một cái gì đó như thế này. Tại đây, latitudelongitude được mã hóa cứng nhưng bạn có thể thay đổi nó theo cách bạn muốn cho php. Khoảng cách tôi đang sử dụng là 50.

select * from 
(
     SELECT 
     i.*, c.name as course_name, 
     (6371 * acos(cos(radians(28.5892)) * cos(radians(i.latitude)) 
      * cos(radians(i.longitude) - radians(77.0858)) + sin(radians(28.5892)) 
      * sin(radians(i.latitude)))) 
     AS distance 
     FROM 
     institutes i 
     inner join course_records c on i.institute_id = c.institute_id 
) as dist 
where dist.distance <50 
and dist.course_name='GATE' 

View SQLFiddle demo here

http://sqlfiddle.com/#!9/1a27f/10

2
$result=$conn->query("(SELECT institutes.*, (6371 * acos(cos(radians($user_latitude)) * cos(radians(institutes.latitude)) * cos(radians(institutes.longitude) - radians($user_longitude)) + sin(radians($user_latitude)) * sin(radians(institutes.latitude)))) AS distance FROM institutes join on institutes.institute_id=course_records.institute_id) as Table1 HAVING Table1.distance < 10 and Table1.course_name like '%GATE%' ORDER BY Table1.distance LIMIT 0 , 10 "); 

Chỉ cần thay thế mã của bạn với việc trên, Hope làm việc này cho bạn.

+0

cảm ơn, đã giúp rất nhiều – tarun14110

Các vấn đề liên quan