Codeigniter MySQL присоединиться к одной таблице в два раза - PullRequest
2 голосов
/ 06 февраля 2012

Решение

Я полагал, что вызов 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();

Вопрос

Я пытаюсь создать почтовую систему в Codeigniter с PyroCms.В моей почтовой таблице есть строка «получатель» и строка «отправитель», которая содержит идентификатор пользователя отправителя и получателя.Чтобы извлечь имена пользователей из идентификаторов, я пытаюсь присоединиться к таблице вместе, но она просто возвращает мне эту ошибку:

Номер ошибки: 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

Мой код выглядит следующим образом:

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

Самое смешное, что если я удаляю последнюю операцию «присоединиться» и оставляю ее только для присоединения к получателю почты, все работает хорошо.

Любые предложения будут оценены.С уважением, Джонас

Ответы [ 5 ]

6 голосов
/ 10 апреля 2012

Это очень просто

$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();
1 голос
/ 06 февраля 2012

Пожалуйста, отметьте Codeigniter ActiveRecord: присоединяйтесь к обратной галочке ! Аналогичная проблема, может быть, у вас есть идея для обхода проблемы.

1 голос
/ 06 февраля 2012

Вы пытались принудительно задать псевдоним в функции соединения (оператор "AS" не будет работать в предложении select, если он у вас есть ...)?

<?php
$this->db->select('mailsystem.*, modtager.username AS modtager_name, afsender.username as afsender_name')
    ->join('`users` `modtager`', 'mailsystem.recipent = modtager.id', 'left')
    ->join('`users` `afsender`', 'mailsystem.sender = afsender.id', 'left');

$this->db->order_by('mailsystem.id', 'DESC');

return $this->db->get('mailsystem')->result();
0 голосов
/ 29 апреля 2019
Its very easy to get data from single table
$this->db->select('a.*,b.fname AS cname,c.fname as uname'); 
$this->db->from('tbl_menus a'); 
$this->db->join('tbl_admin_login b', 'b.id = a.create_by', 'left'); 
$this->db->join('tbl_admin_login c', 'c.id = a.update_by', 'left'); 
$this->db->order_by('a.id', 'desc'); 
return $this->db->get()->result_array();
0 голосов
/ 28 ноября 2012

Вы можете использовать это:

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

* Если вы используете любой префикс db, используйте этот *

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