Codeigniter mysqlは同じテーブルを2回結合する

ソリューション

私は、codeigniterコールがjoin関数の内部でASを行う可能性を忘れてしまった、またはこれまでに知っていたことをatleastが訂正したと考えました。そのため私は元の呼び出しの代わりにこれを行いました

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

質問

PyroCmsでCodeigniterでメールシステムを作ろうとしています。 私のメールテーブルには、 "受取人"の行と、送信者と受取人のユーザIDを含む "送付者"の行があります。テーブルtoghetterに参加しようとしているidsからユーザー名を取得するには、このエラーを返します。

エラー番号: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();

面白いのは、最後の「結合」操作を削除してメールの受信者に参加するだけのままにしておくと、うまくいきます。

どんな提案も感謝します。 誠実な ジョナス

1
ソリューションで更新
追加された 著者 Jonas m,

4 答え

これはとても簡単です

$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();
4
追加された

Codeigniter ActiveRecord:backtickingに参加してください!同様の問題は、おそらくあなたは回避策へのアイデアを持っています。

1
追加された

結合関数でエイリアスを強制しようとしましたか(「AS」演算子は選択句では動作しません...)

<?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();
1
追加された

あなたはこれを使うことができます:

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

*If you are using any db prefix use this *

$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();
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com