Codeigniter mysql连接两次相同的表

Jon*_*s m 2 php mysql join codeigniter pyrocms

我认为codeigniter调用错过了在连接函数内部执行AS的可能性,或者至少我所知道的内容,任何更正都将受到赞赏.因此我做了这个而不是原来的电话

        $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();
Run Code Online (Sandbox Code Playgroud)

我试图在Codeigniter中使用PyroCms制作邮件系统.在我的邮件表中,我有一个"recipent"行和一个"sender"行,其中包含发件人和配方的用户ID.从我尝试加入表toghetter的ID中检索用户名,但它只是返回给我这个错误:

错误号码: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
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

$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();
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我删除最后一次"加入"操作并让它只加入邮件的配方,那么一切都很顺利.

任何建议将不胜感激.真诚的乔纳斯

Muh*_*eel 7

这很简单

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


Jon*_*s m 0

在这个线程的时候,我认为 codeigniter 调用错过了 AS在连接内部执行操作的可能性,因此解决了这个问题:

$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();
Run Code Online (Sandbox Code Playgroud)