2015-12-21 10 views
5

Sto ottenendo gli istituti entro 10 km in $ result. Ma voglio che gli istituti con il nome del corso abbiano GATE. Come posso fare questo? course_records ha un istituto di chiavi straniere negli istituti. Non sono in grado di unirmi a questi tavoli. Qualsiasi tipo di aiuto sarà apprezzato.Unire tabelle utilizzando la chiave esterna

$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> seleziona * da istituti;

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

risposta

3

provare con:

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

è possibile aggiungere più di campo sia da tavolo come selezionare campo utilizzando alias della tavola come cr.subject per il corso soggetto dal course_records tavolo.

+0

il codice ha funzionato dopo aver aggiunto la virgola, dopo 'SELECT i.name come nome_st, cr.name come nome_corso' – tarun14110

+0

oh sì mi permetta di aggiornare la mia risposta –

3

Non sono sicuro di come si calcola la distanza e non sto andando nei suoi dettagli. Si prega di controllare la formula per esso. Supponendo che lo correggi, prova qualcosa di simile. Qui lo latitude e longitude sono hardcoded ma è possibile cambiarlo nel modo desiderato per php. Anche la distanza che sto usando è 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 "); 

Basta sostituire il codice con quanto sopra, Spero che questo funziona per voi.

+0

grazie, aiutato molto – tarun14110

Problemi correlati