【问题标题】:Get foregin key value not id SQL获取外键值不是 id SQL
【发布时间】:2019-05-29 05:10:05
【问题描述】:

各位 php 初学者来了 :)

我知道我的问题被问了很多,但我阅读了 20 多个答案,其中大多数不适用于我的查询,我的查询很简单,但我不知道为什么不适合我 :( ,

我有 2 个表:

1- USERS : (id,username,country,status) 主键是 id 而外键是 country

2- 国家 (country_id,country_en,country_code) 主键是country_id

当我将数据插入国家表并将数据插入用户时,一切都很好并且相互连接!

但是当我来查询部分时,这是我的问题: 这里一切正常! 但是国家/地区输出值是 ID,我希望它是它的名称,因为 country_en 具有名称值

$sql = "SELECT * FROM `users` 
        WHERE `users`.`status` = 'active' 
        ORDER BY RAND() LIMIT 10 ";

在阅读了许多问题的答案后,我尝试添加 UNION、LEFT JOIN 等。但仍然一样,我从我的问题中知道了问题,我将从我的错误中吸取教训 我试图解决这个问题的最终查询

$sql = "SELECT * 
        FROM `users` WHERE `users`.`status` = 'active' 
        INNER JOIN `countries` ON `users`.`country` = `countries`.`country_en` 
        ORDER BY RAND() LIMIT 10 ";

你们能帮我吗:(

【问题讨论】:

  • country_en 字段是什么?你 JOIN 使用这个字段,我想它一定是:INNER JOIN countries ON users.country = countries.country_id
  • 您是否应该加入countries.country_id 而不是countries.country_en?你应该展示一些数据来帮助我们可视化这个问题,它有点不清楚。
  • 给我们一个来自目标表和连接表的表数据示例。如果您想按名称而不是 id 返回 country 的数据,我们将需要从每个表中查看一个表行,以便我们知道如何帮助您制定查询
  • @ThomasG 谢谢你,我会拍两张桌子的照片并把它插在这里可能有帮助吗????

标签: php sql mysqli inner-join


【解决方案1】:
$sql = "SELECT users.username,users.country,user.status,countries.country_en 
    FROM users 
    INNER JOIN countries ON users.country = countries.country_id 
    WHERE users.status = 'active' 
    ORDER BY RAND() LIMIT 10 ";

但是,您对 sql 注入持开放态度,因此请查看准备好的语句

【讨论】:

  • 感谢您的提醒,我将完全转换它,但首先我从简单的查询开始了解如何使用它,非常喜欢?
【解决方案2】:

感谢每一位尝试帮助我的人,

我想和大家分享我的问题的答案,用最好的方法来获取外键数据而不是只获取ID,该方法使用“JOIN

minitauros 说: JOIN 工作如果 表有不同的列名。在最终查询

下方
SELECT `users`.`id`, `users`.`username`, `users`.`country`, `users`.`status`, `countries`.`country_id`, `countries`.`country_en` FROM `users` JOIN `countries` ON `users`.`id` = `countries`.`country_id` WHERE `users`.`id` = 1

在查询的 ON 部分,您告诉查询 第一个表中的 哪一列 匹配 中的哪一列第二张表

感谢minitauros

The used SELECT statements have a different number of columns??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2019-08-30
    相关资源
    最近更新 更多