有两个表:admin,news
结构是这样的:
admin
-----
id
name
news
-----
id
createBy
updateBy
目前createBy和updateBy存储了管理员ID,我想获取createBy和updateBy的管理员名称,如何实现?感谢
以下是我在codeigniter中使用的内容
$this->db->select('*');
$this->db->from('news,admin');
$this->db->where('id', $id);
$this->db->where('admin.id', 'news.updateBy');
无论如何sql查询是受欢迎的,我会将其转换为codeigniter语法。谢谢你的帮助
答案 0 :(得分:5)
这是一个查询,它将提取特定的新闻ID并获取由管理员表格中的值创建和更新的内容:
select
adu.id sd as updateID,
adu.name as updateName,
adc.id as createID,
adc.name as createName
from
news ns
left outer join admin adu
on ns.updateBy=adu.id
left outer join admin adc
on ns.createBy=adc.id
where
news.id=1
我已加入管理员表两次 - 因为管理员更新可能与管理员创建不同 - 如果任一字段为空,则内部联接不起作用。这样做还可以让你选择你想要的(创建或更新),但仍然将它们放在同一行数据中。
如果这是你正在寻找的,那么这是一个简单易懂的查询,你可能真的从阅读这个question and answer中受益,我把它放在一起来更详细地解释这样的查询。它详细显示和解释了内部和外部联接,数据分组和聚合。
编辑:我在查询中添加了列别名,这意味着您可以选择所需的列别名。我写的和链接的文章也详细解释了:))
答案 1 :(得分:0)
mysql语句:
select a.id, b.name creator, c.name updater
from news a
join admin b on a.createBy = b.id
join admin c on a.updateBy = b.id
where a.id = $id;
答案 2 :(得分:0)
您可以尝试以下查询: -
SELECT b.name, a.createBy, a.updateBy
FROM news a
INNER JOIN admin b on a.id = b.id
WHERE a.id = $id;
希望这可以帮到你。
答案 3 :(得分:0)
SELECT admin_1.name AS CreateBY, admin.name AS UpdateBY
FROM news INNER JOIN
admin AS admin_1 ON news.id = admin_1.Id CROSS JOIN
admin INNER JOIN
news ON admin.Id = news.Id