gpt4 book ai didi

php - codeigniter 事件记录 : Fields lost when performing a JOIN

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:02 24 4
gpt4 key购买 nike

当我使用 CI 的 Active Record 执行连接时,有时结果不会显示所有字段。例如,当对具有相同字段名称的表执行连接时,表的其中一个字段将不会显示在结果中。

示例:

=== TABLE users ===
id INT(10)
first_name VARCHAR(255)
last_name VARCHAR(255)

=== TABLE messages ===
id INT(10)
exp_id INT(10)
dest_id INT(10)
content TEXT

=== CONTENT OF THE DATABASE ===
INSERT INTO users VALUES (1, "Bob", "Smith");
INSERT INTO users VALUES (2, "Graig", "Anderson");
INSERT INTO messages VALUES (999, 1, 2, "Hello Graig!");

=== the query ===
$this->db->where('messages.id', 999);
$this->db->join('users exp', 'users.id=messages.exp_id', 'INNER');
$this->db->join('users dest', 'users.id=messages.dest_id', 'INNER');
$res = $this->db->get('messages');

== the result ===
id exp_id dest_id content first_name last_name
999 1 2 Hello Graig! Bob Smith

我无法同时检索“dest.first_name”和“dest.first_name”。表“dest”在 join() 中,但与表“exp”有冲突,表“exp”也有字段“first_name”和“last_name”。实际上这不是 CI 问题,这是 MySQL 的行为方式。

它可以使用 select/aliases 来修复,但是有没有办法让 CI 选择性地将连接表的别名附加(或预先添加)到它的字段中?所以结果可能是这样的:

id      exp_id  dest_id content         id_exp  first_name_exp  last_name_exp   id_dest first_name_dest last_name_dest
999 1 2 Hello Graig! 1 Bob Smith 2 Graig Anderson

最佳答案

“当对具有相同字段名称的表执行连接时,该表的字段之一将不会显示在结果中。”

正是您的问题,这是任何数据库的标准 sql,而不是 codeigniter。字段名称的最后一个实例将始终是所选的那个,即使您使用“SELECT * ...”也是如此。

简短的回答是,不,CI 中没有这样的功能。按照您的建议使用您的别名是解决方案;让它成为你自己将涉及扩展核心数据库驱动程序类,我猜这比你感兴趣的工作要多得多

使用 ORM 可能会解决这个问题,但我认为这本身并不足以解决这个问题

关于php - codeigniter 事件记录 : Fields lost when performing a JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com