php codeigniter组装查询结果
我的设置如下:php codeigniter组装查询结果,php,mysql,codeigniter,Php,Mysql,Codeigniter,我的设置如下: Table 'data': 'title','body',...,'user_id',... Table 'users': 'user_id','some_val'... 基本上,我希望以某种方式将user_id字段上的表'data'和'users'连接起来,以便从'users'表中提取'some_val'。我的问题是并非“数据”表中的每个用户id在“用户”表中都有相应的条目 使用codeigniter/php,我最终希望组装一个结果数组,其中包含来自“users”表的所有
Table 'data': 'title','body',...,'user_id',...
Table 'users': 'user_id','some_val'...
基本上,我希望以某种方式将user_id字段上的表'data'和'users'连接起来,以便从'users'表中提取'some_val'。我的问题是并非“数据”表中的每个用户id在“用户”表中都有相应的条目
使用codeigniter/php,我最终希望组装一个结果数组,其中包含来自“users”表的所有“some\u vals”,并连接data.user\u id=users.user\u id
。但是,当数据表中存在一个用户id,而不是用户表中的用户id时,我想在结果数组中插入一些默认值(希望这个数组可以与数据表中的用户id的顺序相同)
希望这不是太不清楚。有什么想法吗?你想做的就是所谓的“a”。本质上,这将获取
数据的所有行
,并匹配用户
表。除此之外,如果数据
没有匹配的用户id
,它只会为这些列加载null
。为了处理那些null
s,您可以使用该函数,它将null
替换为一些值(如果是数字,则可能是1234,但出于演示目的,我只选择了'DefaultVal'
)
不管怎么说,这一切都是这样的:
select
coalesce(u.some_val, 'DefaultVal') as some_val
from
data d
left join users u on
d.user_id = u.user_id
感谢您对该查询的快速响应-我不需要“从数据d,用户u…”吗?不
来自数据d,用户u
是表示来自数据d内部连接用户u on…
的缩写。在本例中,我们使用的是左连接
,而不是内部连接
。内部联接
将仅获取具有有效用户id的数据行
。left join
将获得所有行,并为与数据不匹配的用户列返回null
。哦,别担心,我读得更仔细了,我说的没有意义。谢谢你的帮助!我不知道合并功能很高兴能帮上忙。coalesce
函数实际上存在于每一个RDBMS中,并且非常有用。left join
s也是如此。这两个概念对于更高级的SQL来说都是必不可少的。此外,如果这对您有帮助,请将其标记为答案/投票给未来的观众。而且,我碰巧喜欢我名字旁边的数字上升,所以这不完全是利他动机:)