【问题标题】:Select server name from another table从另一个表中选择服务器名称
【发布时间】:2012-06-03 22:25:58
【问题描述】:

我有两张桌子,filesservers。这是架构:

f_id, s_id, u_id, name, size, downloads, uploaded

s_id, name, description, disk_space, used_space, enabled

现在,我正在尝试获取有关特定文件以及它所在的服务器的一些信息。在files 表中,这是由s_id 列确定的,它是servers 表的外键。我想检索文件名、大小、上传时间以及它所在的服务器。我试过这个:

public function get_file_details()
{
    $sql= 'SELECT name, size, uploaded, server
           FROM `files` f
           JOIN `servers` s
           ON f.s_id = s.u_id
           WHERE f_id = ?
           LIMIT 1';
}

但它不起作用。我做错了什么?

【问题讨论】:

  • 你真的在执行 SQL 查询吗?什么不起作用?您是否收到错误消息?
  • 糟糕,抱歉。这是错误:Column 'name' in field list is ambiguous。我想我明白它的意思(它不知道name 来自哪里)但我不知道如何告诉它它来自servers

标签: php mysql sql codeigniter join


【解决方案1】:
public function get_file_details()
{
    $sql= 'SELECT f.name, size, uploaded, s.name
           FROM `files` f
           JOIN `servers` s
           ON f.s_id = s.s_id
           WHERE f_id = ?
           LIMIT 1';
}

3 处更改:名称 => f.name,服务器 => s.name,打开 f.s_id = s.u_id => 打开 f.s_id = s.s_id

【讨论】:

    【解决方案2】:

    显示此错误是因为两个表中都存在名称字段,因此它变得不明确。为避免此错误,请始终添加表名别名 试试这个

    SELECT f.name, f.size, f.uploaded, s.name
               FROM `files` f
               JOIN `servers` s ON f.s_id = s.s_id
               WHERE f_id = ?
               LIMIT 1'
    

    【讨论】:

      猜你喜欢
      • 2017-11-22
      • 2010-10-05
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多