Combining two table with sql JOIN? [duplicate]

2019-03-07 04:54发布

问题:

Possible Duplicate:
Combining several database table together?

I want from two database table get output like this:

One-week tour of Istanbul_1 | 88888 & 99999 $ 112233 $ 445566 | Three nights and two days | 15:29
One-week tour of Istanbul_2 | 55555 & 66666 $ 77777 | Three nights and two days | 12:03
One-week tour of Istanbul_3 | 11111 & 22222 $ 33333 $ 44444 | Three nights and two days | 12:03

These are my tables:

Update:

it give me this output: http://img708.imageshack.us/img708/2404/outputnz.gif but if i put in $find value "55555" for where output is as: http://img528.imageshack.us/img528/3576/outputnow.gif but i want out is as: http://img832.imageshack.us/img832/120/outputwant.gif . How is it?

$query = $this -> db -> query('
    SELECT
       @rownum := @rownum + 1 rownum,
       tour_foreign.id, 
       tour_foreign.name, 
       MIN(tour_foreign_residence.name_re) AS name_re, 
       tour_foreign.service, 
       tour_foreign.date_go, 
       tour_foreign.date_back, 
       tour_foreign.term,
       tour_foreign.useradmin_submit,
       tour_foreign.date_submit,
       GROUP_CONCAT( tour_foreign_residence.name_re 
                     ORDER BY tour_foreign_residence.name_re 
                     SEPARATOR " $ "
                   ) AS name_re_all
    FROM   tour_foreign 
      INNER JOIN tour_foreign_residence 
        ON ( tour_foreign.id = tour_foreign_residence.relation )
      JOIN (SELECT @rownum := 0) r
    WHERE  tour_foreign.name LIKE "%' . $find . '%" 
        OR tour_foreign_residence.name_re_all LIKE "%' . $find . '%"
    GROUP BY  tour_foreign.id ');

I get from above sql following error:

A Database Error Occurred
Error Number: 1054

Unknown column 'tour_foreign_residence.name_re_all' in 'where clause'

SELECT @rownum := @rownum + 1 rownum, tour_foreign.id, tour_foreign.name, MIN(tour_foreign_residence.name_re) AS name_re, tour_foreign.service, tour_foreign.date_go, tour_foreign.date_back, tour_foreign.term, tour_foreign.useradmin_submit, tour_foreign.date_submit, GROUP_CONCAT( tour_foreign_residence.name_re ORDER BY tour_foreign_residence.name_re SEPARATOR " $ " ) AS name_re_all FROM tour_foreign INNER JOIN tour_foreign_residence ON ( tour_foreign.id = tour_foreign_residence.relation ) JOIN (SELECT @rownum := 0) r WHERE tour_foreign.name LIKE "%%" OR tour_foreign_residence.name_re_all LIKE "%%" GROUP BY tour_foreign.id

Filename: D:\xampp\htdocs\system\database\DB_driver.php

Line Number: 330

回答1:

You need to group by something or the aggregate GROUP_CONCAT() will collect all rows into one:

GROUP BY  tour_foreign.id 

Use:

$query = $this -> db -> query('
    SELECT
       @rownum := @rownum + 1 rownum,
       tour_foreign.id, 
       tour_foreign.name, 
       MIN(tour_foreign_residence.name_re) AS name_re, 
       tour_foreign.service, 
       tour_foreign.date_go, 
       tour_foreign.date_back, 
       tour_foreign.term,
       tour_foreign.useradmin_submit,
       tour_foreign.date_submit,
       GROUP_CONCAT( tour_foreign_residence.name_re 
                     ORDER BY tour_foreign_residence.name_re 
                     SEPARATOR " $ "
                   ) AS name_re_all
    FROM   tour_foreign 
      INNER JOIN tour_foreign_residence 
        ON ( tour_foreign.id = tour_foreign_residence.relation )
      JOIN (SELECT @rownum := 0) r
    WHERE  tour_foreign.name LIKE "%' . $find . '%" 
        OR tour_foreign_residence.name_re LIKE "%' . $find . '%"
    GROUP BY  tour_foreign.id ');


回答2:

Try adding a GROUP BY clause at the end of the SQL statement.



回答3:

SELECT a.name, GROUP_CONCAT(b.name_re ORDER BY b.name_re SEPARATOR " & "), a.term, a.time_go 
FROM tour_foreign a INNER JOIN tour_foreign residence b
ON a.id = b.relation
GROUP BY a.name

I'm just learning SQL so i picked up your problem as an exercise. Hope it works.