簡體   English   中英

使用外鍵連接表

[英]Join tables using foreign key

我在 $result 中得到了 10 公里以內的機構。 但我想獲得課程名稱為 GATE 的機構。 我怎樣才能做到這一點? course_records 在 institutes 中有一個外鍵 institute_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> 從機構中選擇 *;

+--------------+-------------------+---------------------+----------------+----------------------------------+-------------+--------+----------+-----------+
| institute_id | name              | email               | contact_number | address                          | telephone   | tut_id | latitude | longitude |
+--------------+-------------------+---------------------+----------------+----------------------------------+-------------+--------+----------+-----------+
|           23 | Dhananjay Classes | dhananjay@gmail.com | 9999888877     | Palam dabri Road,Mahavir Enclave | 011-1234567 |     11 |  28.5892 |   77.0858 |
|           24 | ffe               | rr@rere             | 323232         |                                  |             |     11 |  28.5667 |   77.2833 |
+--------------+-------------------+---------------------+----------------+----------------------------------+-------------+--------+----------+-----------+

mysql> 從課程記錄中選擇 *;

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

試試看:

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

您可以通過對course_records cr.subject表的別名,從兩個表中添加更多字段作為選擇字段。

我不確定你是如何計算距離的,我不會詳細說明。 請核對你的公式。 假設你糾正了它,試試這樣的事情。 這里的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'

在此處查看 SQLFiddle 演示

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

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

只需用上面的代碼替換您的代碼,希望這對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM