【问题标题】:SQL JOIN replacing an unwanted columnSQL JOIN 替换不需要的列
【发布时间】:2019-12-06 18:40:29
【问题描述】:

我创建了一个JOIN 查询,以便能够从users 表中访问username 列,其中t.user_id = u.id

很遗憾,创建此查询后出现了问题。现在,当我尝试使用触发器表中的id 时,我的变量正在从users 表中获取id

有人知道我该如何解决这个问题吗?

try {
    $con = getConfig('pdo');
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql_triggers = "
        SELECT
            t.*,
            u.id,
            u.username
        FROM
            triggers AS t
        LEFT JOIN
            users AS u ON t.user_id = u.id
    ";
    $triggers_stmt = $con->prepare($sql_triggers);
    $triggers_stmt->execute();
    $triggers_rows = $triggers_stmt->fetchAll(PDO::FETCH_ASSOC);
    $triggers_arr = array();
    foreach ($triggers_rows as $triggers_row) {
        $trigger_id = $triggers_row['id'];
        $trigger_title = $triggers_row['trigger_name'];
        $trigger_description = $triggers_row['description'];
        $trigger_setting = $triggers_row['setting'];
        $trigger_user = $triggers_row['user_id'];
        $trigger_username = $triggers_row['username'];

触发器 = t

CREATE TABLE `triggers` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `trigger_name` varchar(70) COLLATE utf8_unicode_ci NOT NULL,
 `setting` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 `description` text COLLATE utf8_unicode_ci NOT NULL,
 `user_id` int(11) NOT NULL,
 `placement` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
 `date_changed` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

用户 = 你

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `firstname` varchar(55) COLLATE utf8_unicode_ci NOT NULL,
 `lastname` varchar(55) COLLATE utf8_unicode_ci NOT NULL,
 `email` varchar(55) COLLATE utf8_unicode_ci NOT NULL,
 `username` varchar(70) COLLATE utf8_unicode_ci NOT NULL,
 `password` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `salt` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `joined` datetime NOT NULL,
 `last_login` datetime NOT NULL,
 `group` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_c

【问题讨论】:

  • Why did you delete your other question保罗?我发表了评论,并认为你会回复我。
  • 由于两个表具有相同的字段名称,因此您需要区分它们。您可以在 sql 语句中使用 u.id 作为 UID,然后在后续操作中引用 UID。
  • @FunkFortyNiner 我没有看到你的评论,抱歉。我删除它是因为有人关闭了它。
  • @jeff 我会在这里做吗? t.*, u.id,
  • @Paul 请发布您的答案/解决方案。奈杰尔重新打开。

标签: php mysql sql join left-join


【解决方案1】:

我能够修改 SQL 以获得我正在寻找的结果。用户id 列与触发器id 列发生冲突。正如 NigelRen 指出的,将 u.id, 更改为 u.id AS uid, 解决了这个问题。

SELECT
    t.*,
    u.id AS uid,
    u.username
FROM
    triggers AS t
LEFT JOIN
    users AS u ON t.user_id = u.id
";

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2011-03-26
    • 2023-03-19
    • 2014-10-03
    • 2021-03-16
    相关资源
    最近更新 更多