【问题标题】:Query to get the data in related table查询获取相关表中的数据
【发布时间】:2014-07-29 15:46:16
【问题描述】:

有两个表:admin,news

结构是这样的:

admin
-----
id
name

news
-----
id
createBy
updateBy

目前 createBy 和 updateBy 存储的是 admin 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 语法。感谢您的帮助

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

    这是一个查询,它将提取特定的新闻 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 中受益匪浅,我将这些查询放在一起以更详细地解释此类查询。它详细展示并解释了内部和外部联接、数据分组和聚合。

    编辑:我在查询中添加了列别名,这意味着你可以选择你想要的。我写并链接到的文章也详细解释了这一点:)

    【讨论】:

    • 对不起,如果我尝试选择 * ,那么我如何获得 adu.name 和 adc.name?
    【解决方案2】:

    您可以尝试以下查询:-

    SELECT b.name, a.createBy, a.updateBy
    FROM news a
    INNER JOIN admin b on a.id = b.id
    WHERE a.id = $id;
    

    希望对你有帮助。

    【讨论】:

    • 管理员ID不是新闻表的ID。这将如何运作?
    【解决方案3】:
    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
    

    【讨论】:

    • 来吧伙计们。查看问题中的结构并阅读所写的内容。表中的 id 字段不是公共键。
    • 其实可以自己试试
    【解决方案4】:

    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;
    

    【讨论】:

    • 管理员ID不是新闻表的ID。这将如何运作?
    • @Fluffeh,谢谢。我完全误解了这个问题。已更正
    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多