1

基本上,我有这样的编码约定,即任何作为 ID 的主键,我都会将列名称为“id”。所以我的问题来了。我正在加入两个表,我得到的是第二个表的 ID,而不是第一个表。我知道如果我使用 select "artists.id, ..." 它会起作用,但我想知道是否有使用 "select *" 的修复,这对于未来的扩展会更好(新的列将会出现......) .

这是我的模型:

$this->db->select('*');
$this->db->from('artists');
$this->db->join('categories', 'artists.category_id = categories.id');
$this->db->where('id', $id);
$this->db->limit(1);

使用 Print_R 我可以看到我得到了所有列(但只有 1 个 id,它来自类别表而不是艺术家表),没有任何表前缀。

4

2 回答 2

3

您应该使用表别名限定列

$this->db->select('a.id as artist_id, c.id as category_id, a.column2,c.column3');
$this->db->from('artists a');
$this->db->join('categories c', 'a.category_id = c.categories.id');
$this->db->where('a.id', $id);
$this->db->limit(1);

如果您想继续使用SELECT *

$this->db->select('a.*, c.*, a.id as artist_id, c.id as category_id');
$this->db->from('artists a');
$this->db->join('categories c', 'a.category_id = c.categories.id');
$this->db->where('a.id', $id);
$this->db->limit(1); 

请记住,将返回最后一个重复列。因此,a.*,c.*将返回c.idasid并将c.*,a.*返回a.idas id

于 2013-08-05T18:23:14.423 回答
0

我认为为了节省您的麻烦和将来,请始终使用列名前面的表格。这里没有逻辑,当您查找 * 时,它表示所有字段,例如在 Oracle 中,您将获得所有字段以及前面的表,我猜在 MySQL 中不会,但如果我是你,我不会冒险它。

于 2013-08-05T18:24:20.837 回答