以下代码发出以下错误消息:
A Database Error Occurred
Error Number: 1066
Not unique table/alias: 'users'
SELECT * FROM (`users`, `users`) JOIN `user_profiles` ON `users`.`id` = `user_profiles`.`user_id`
Filename: /home/xtremer/public_html/kowmanager/models/cpanel/dashboard.php
Line Number: 38
这是我的代码:
class Dashboard extends CI_Model {
private $table_name = 'users'; // user accounts
private $profile_table_name = 'user_profiles'; // user profiles
function __construct() {
parent::__construct();
$ci =& get_instance();
$this->table_name = $ci->config->item('db_table_prefix', 'tank_auth').$this->table_name;
$this->profile_table_name = $ci->config->item('db_table_prefix', 'tank_auth').$this->profile_table_name;
}
/**
* Get user info by Id
*
* @param int
* @param bool
* @return object
*/
function get_user_info($id) {
$this->db->select('*');
$this->db->from('users');
$this->db->join('user_profiles', 'users.id = user_profiles.user_id');
$query = $this->db->get($this->table_name);
if ($query->num_rows() == 1) {
return $data = $query->row();
} else {
return NULL;
}
}
}
编辑:我知道我的功能有这个并改变它,因为看了之后我不需要额外的表。我有一个数组($ data)的值被发送到我的标题但是我可以将它发送到构建,就像它将数组发送到所有部分一样。
function get_user_info($id)
{
$this->db->select('*');
$this->db->from('users');
$this->db->where('users.id', $id);
$query = $this->db->get();
if ($query->num_rows() == 1)
{
return $data = $query->row();
}
else
{
return NULL;
}
}
这是我更新的控制器:
function index()
{
$id = $this->tank_auth->get_user_id();
$data = $this->Dashboard->get_user_info($id);
print_r($data);
$this->template->set_layout('cpanel')->enable_parser(false);
$this->template->set_partial('header', 'partials/header', $data);
$this->template->set_partial('sidebar', 'partials/sidebar');
$this->template->set_partial('content', 'partials/content');
$this->template->set_partial('footer', 'partials/footer');
$this->template->build('/cpanel/index');
}
答案 0 :(得分:3)
问题在于:
SELECT * FROM (users, users)
我假设您正在尝试将表连接到自身,但是如果不给表添加别名就不能这样做,否则数据库在您引用时不知道您引用的连接的哪一侧来自它的领域。
试试这个:
SELECT *
FROM users u1, users u2
JOIN user_profiles ON u1.id = user_profiles.user_id
<强>更新强>
我的上述答案是根据错误信息编写的,但我没有注意到代码链接(我已经添加了代码以与问题内联)。
我对CI并不过分熟悉,但我觉得你的问题在于以下三个方面:
private $table_name = 'users';
$this->db->from('users');
$query = $this->db->get($this->table_name);
在第3行中,您明确get
ting $this->table_name
指向users
表,如第1行所示。但是,通过在第2行显式设置from
表,也指向users
,我认为您不小心在两个表之间设置了连接。由于这两个表都是相同的,并且两者都没有别名,因此导致错误。尝试删除$this->db->from('users');
行,看看是否能解决问题。
更新2:
我一直在阅读CodeIgniter user guide,当您使用像{{1}这样的方法构建查询时,您似乎不需要将任何内容指定为$this->db->get()
的参数}。我建议只改变这一行:
from()
到此:
$query = $this->db->get($this->table_name);
有关详细信息,请参阅this page。
答案 1 :(得分:1)
当您编写users,users
但未向其中任何一个提供别名时,您正在使用users表的笛卡尔积。我认为你根本不想采用笛卡尔积。尝试:
SELECT * FROM users JOIN user_profiles ON users.id = user_profiles.user_id