Search code examples
phpmysqlcodeigniterjoinpyrocms

How to join the same table twice and assign table aliases in Codeigniter?


I'm trying to make a mail system in Codeigniter with the PyroCms. In my mail table, I have a "recipent" row and a "sender" row which contains the user id of the sender and recipient. To retrieve usernames from the ids, I'm trying to join the table together, but it simply returns me this error:

Error Number: 1066

Not unique table/alias: 'default_users'

SELECT `default_mailsystem`.*, `default_users`.`username` AS modtager, `default_users`.`username` as afsender
FROM (`default_mailsystem`)
LEFT JOIN `default_users` ON `default_mailsystem`.`recipent` = `default_modtager`.`id`
LEFT JOIN `default_users` ON `default_mailsystem`.`sender` = `default_afsender`.`id`
ORDER BY `id` DESC

Filename: /hsphere/local/home/brightmedia/reuseable.dk/modules/mail/models/mail_m.php

Line Number: 13

My code is as follows:

$this->db->select('mailsystem.*, users.username AS modtager, users.username as afsender')
    ->join('users', 'mailsystem.recipent = modtager.id', 'left')
    ->join('users', 'mailsystem.sender = afsender.id', 'left');
$this->db->order_by('id', 'DESC');
return $this->db->get('mailsystem')->result();

The funny thing is, that if I remove the last "join" operation and leave it to only join the recipient of the mail it all works out well.


Solution

  • At the time of this thread, i figured that the codeigniter call missed out the possibility to do AS inside of a join, Therefor this solved the issue:

    $sql = "
        SELECT default_mailsystem.*,
               recipent.first_name AS modtager, 
               sender.first_name AS afsender
        FROM default_mailsystem
        LEFT JOIN default_profiles AS recipent ON recipent.id = default_mailsystem.id
        LEFT JOIN default_profiles AS sender ON sender.id = default_mailsystem.id
    ";
    return $this->db->query($sql)->result();