I am trying to perform an outer JOIN 3 tables based on the "site_id" column in each table. I'm using Codeigniter/Active Record.
The user enters a site number via a form and once the number is submitted it should call the model that executes something like this:
$site_id = $this->input->post('site_id');
$this
->db
->select('*')
->where('site_id', $site_id)
->from('sites')
->join('leader', 'sites.site_id = leader.site_id', 'outer')
->join('state', 'sites.site_id = state.site_id', 'outer');
$q = $this->db->get();
However I get the following error message:
"Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER JOIN leader
ON sites
. site_id
= leader
. site_id
OUTE' at line 3
SELECT * FROM ( sites
) OUTER JOIN leader
ON sites
. site_id
= leader
. site_id
OUTER JOIN state
ON sites
. site_id
= state
. site_id
WHERE site_id
= '63'
Filename: /home2/cdowney/public_html/mclinbase.com/models/viewsite_model.php
Line Number: 33"
I believe(hope) this is just a small syntax error that I'm missing or a misuse of the outer join but I have not been able to figure it out.
Any guidance?
Try this -
$this->db->select('*');
$this->db->where('sites.site_id', $site_id);
$this->db->from('sites');
$this->db->join('leader', 'sites.site_id = leader.site_id', 'outer');
$this->db->join('state', 'sites.site_id = state.site_id', 'outer')
$q = $this->db->get();
Simply union select the left and right join to get the same result as outer join:
SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.id
UNION
SELECT * FROM table1
RIGHT JOIN table2 ON table1.id = table2.id
Maybe this will help.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.