[英]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
表的別名,從兩個表中添加更多字段作為選擇字段。
我不確定你是如何計算距離的,我不會詳細說明。 請核對你的公式。 假設你糾正了它,試試這樣的事情。 這里的latitude
和longitude
是硬編碼的,但您可以將其改回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'
$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.