MySQL Join Query,无法访问第一个表id列

时间:2014-03-01 00:20:40

标签: php mysql codeigniter

MySQL连接表具有相同的ID冲突: 这是我的查询

$this->db->select();
$this->db->from('manual');
$this->db->join('contact', 'contact.id = manual.contact_id');
$this->db->where('people_id',$practicien);
$this->db->where('DATE(day)', $datee);
$this->db->order_by('TIME(startTime)', 'ASC'); 
$query = $this->db->get();

我需要访问id表中的manual列 但当我使用'id'时,我从id表中获得了contact列的值。

请修正此错误。

7 个答案:

答案 0 :(得分:2)

您可以尝试使用Alias Names

SELECT * FROM table AS t JOIN tbl2 t2 ON t.id = t2.id

然后t.idt2.id访问您的ID。

答案 1 :(得分:0)

您可以将表格名称放在字段之前:

Select manual.id, * from ...

答案 2 :(得分:0)

添加or die (__LINE__." ".mysqli_error($con))以查看错误消息

$con将是这样的$con=mysqli_connect("localhost","root") ...

或使用or die (__LINE__." ".mysql_error())查看错误消息,如果你使用mysql

答案 3 :(得分:0)

使用*有问题。其中一个问题是列在不同的表中具有相同的名称。

这可能会解决您的问题:

select manual.id as manual_id, contact.*
. . .

如果您需要manual表中的更多列,只需添加它们即可。通过使用列别名,可以删除名称冲突问题。

作为一个注释,当您使用using子句时,SQL提供了另一种解决此问题的机制。但是,只有在外键引用和主键具有相同名称时才能执行此操作。事实上,这是为两个相互引用的列使用相同名称的一个很好的理由。如果您这样做,您的查询可能如下所示:

SELECT *
FROM manual m JOIN 
     contact c
     USING (contact_id)
WHERE people_id = '18' AND
      DATE(day) = '2014-03-13' 
ORDER BY TIME(startTime) ASC;

您不会发生名称冲突,只会返回一个id列。

答案 4 :(得分:0)

由于manual.id将是数组中的第一列,您可以这样做 -

$query = $this->db->get();
$row = $query->result_array();
return $row[0];

参考 - https://www.codeigniter.com/user_guide/database/results.html

或者您可以使用别名

将其添加到select()
$this->db->select('manual.id AS `yourid`, *', false);

参考 - https://www.codeigniter.com/user_guide/database/query_builder.html#selecting-data

答案 5 :(得分:0)

$this->db->select("manual.id as manual_id");
                $this->db->from('manual as manual');
                $this->db->join('contact as contact', 'contact.id = manual.contact_id');
                $this->db->where('people_id', $practicien);
                $this->db->where('DATE(day)', $datee);
                $this->db->order_by('TIME(startTime)', 'ASC');
                $query = $this->db->get();

答案 6 :(得分:0)

SKG回答帮助我实现了输出: 这是最终的代码。

$this->db->select('manual.id as rdvid, startTime, endTime, day, firstname, lastname');
$this->db->from('manual');
$this->db->join('contact', 'contact.id = manual.contact_id');
$this->db->where('people_id',$practicien);
$this->db->where('DATE(day)', $datee);
$this->db->order_by('TIME(startTime)', 'ASC'); 
$query = $this->db->get();
//print_r($this->db->last_query());
return $query;