查询以获取相关表中的数据

时间:2014-06-09 06:11:54

标签: php mysql sql codeigniter

有两个表: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语法。谢谢你的帮助

4 个答案:

答案 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