簡體   English   中英

連接多次同一個表時出錯

[英]Error when joining multiple times the same table

是否可以在使用一個表工作多次時連接多個表? 讓我解釋。

我有三個表categoriescontentmembers
使用CodeIgniter的ActiveRecord btw。 這是我的content_model.php

public function get_content_list(){

    $this->db
        ->select('
            content.id,
            categories.id as catid,
            categories.title as category,
            content.alvl,
            content.ordering,
            content.state,
            content.title,
            content.slug,
            content.text,
            content.views,
            content.aid,
            members.username as author,
        ')
        ->join('categories', 'content.catid = categories.id')
        ->join('categories', 'content.alvl = categories.id') // MARK01
        ->join('members', 'content.aid = members.id');

    $query = $this->db->get($this->_table_name);

    if($query->num_rows() > 0)
        return $query->result();
    else
        return FALSE;

}

我留下第二行評論為MARK01 ,這就是問題開始的地方。

現在澄清一下, 類別存儲在一個數據庫表categories用於memberscontents (頁面,文章等), banners等...有一個列categories.cid代表組件的ID並連接到DB表components 因此,每當我需要檢索成員的類別時,我將使用WHERE categories.cid = 3 它工作正常,直到我需要從多個表中檢索JOINed記錄,同時多次詢問同一個表。

這是一個帶有注釋行的var_dump()來解釋,用COMMENTED MARK01行來防止出錯:

array (size=3)
  0 => 
    object(stdClass)[41]
      public 'id' => string '1' (length=1)
      public 'catid' => string '5' (length=1)
      public 'category' => string 'News' (length=4)
      public 'alvl' => string '10' (length=2) // Access level
      public 'ordering' => string '1' (length=1)
      public 'state' => string '1' (length=1) // Status ON/OFF
      public 'title' => string 'Qualification for a new production set' (length=38)
      public 'slug' => string 'qualification-for-a-new-production-set' (length=38)
      public 'text' => string 'Very long text blablabla"'... (length=2629)
      public 'views' => string '13' (length=3)
      public 'aid' => string '1' (length=1)  // Author ID
      public 'author' => string 'aspirinemaga' (length=12)

這是我取消注釋第二行MARK01時得到的結果

A Database Error Occurred
Error Number: 1066
Not unique table/alias: 'cis_categories'
SELECT `cis_content`.`id`, `cis_categories`.`id` as catid, `cis_categories`.`title` as category, `cis_content`.`alvl`, `cis_content`.`ordering`, `cis_content`.`state`, `cis_content`.`title`, `cis_content`.`slug`, `cis_content`.`text`, `cis_content`.`views`, `cis_content`.`aid`, `cis_members`.`username` as author FROM (`cis_content`) JOIN `cis_categories` ON `cis_content`.`catid` = `cis_categories`.`id` JOIN `cis_categories` ON `cis_content`.`alvl` = `cis_categories`.`id` JOIN `cis_members` ON `cis_content`.`aid` = `cis_members`.`id`
Filename: D:\wamp\www\cmstut\system\database\DB_driver.php
Line Number: 330

知道這里有什么問題嗎?

如果JOIN表超過1次,則必須給它們不同的名稱。

... JOIN categories categories2 ON content.catid = categories2.id...

在這種情況下,您應該使用“categories2”來定義“ON”。 對於“SELECT”也使用您的新名稱

對於codeigniter活動記錄,您可以嘗試

$this->db->join('categories AS categories2',...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM