2015-12-21 43 views
5

我正在以10美元的成绩获得研究所。但是我希望获得具有GATE课程名称的研究所。我怎样才能做到这一点? course_records在学院有一个外键院校ID。我无法加入这些表格。 任何形式的帮助将不胜感激。使用外键加入表格

$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 | 
+-----------+------+--------------+-------+--------------+--------------------------+--------------------+---------------+-----------+---------+--------------+ 

回答

3

尝试用:

$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 "); 

,你可以从两个表作为选择字段通过使用像cr.subject表的别名从course_records表当然主题添加更多领域。

+0

加入逗号后代码工作'SELECT i.name as inst_name,cr.name as course_name' – tarun14110

+0

哦,是的,让我更新我的答案 –

3

我不确定你如何计算距离,我不会详细讨论。请仔细检查你的公式。假设你纠正它,尝试这样的事情。这里latitudelongitude是硬编码的,但您可以按照您想要的方式将其更改为php。另外我使用的距离是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 "); 

只是上面, 希望这个作品为您更换你的代码。

+0

谢谢,帮了很多 – tarun14110