mysql - 如何仅显示 MySQL 中基于另一个表的列中的一行 - Express JS

标签 mysql node.js express

我使用 ExpressJS 和 MySQL 创建了一个简单的 CRUD 应用程序。我想做的是根据创建该帖子的用户显示指定帖子的“用户名”。

我有 2 个表...帖子和用户。 posts 表有一个作者列,该列在创建帖子时填充用户 ID。

我能够根据帖子 ID(即帖子标题和帖子正文)让特定的“帖子”显示其数据。但是,当我尝试根据创建该特定帖子的用户显示“用户名”时,它会显示用户表内的每个“用户名”。

任何人都可以帮助我,以便当我查看特定帖子时,它只会根据该用户创建的帖子显示正确的“用户名”吗?

我的代码如下:

posts.js

// Read A Post
router.get('/:id', (req, res, next) => {
    let sql = `SELECT * FROM posts WHERE id = ${req.params.id}`;
    let query = db.query(sql, (error, result) => {
        if(error) throw error;
        db.query(`SELECT name FROM users`, (error, userName) => {
            if(error) throw error;
            res.render('post', {
                posts: result,
                author: userName
            });
        });
    });
});

帖子.pug

extends layout

block content
    ul.list-group
        each post in posts
            li.list-group-item
                h1= JSON.stringify(post.title)
                h3= JSON.stringify(author)
                p= JSON.stringify(post.body)
            a.btn.btn-primary.float-right(href='/posts/update/' + post.id) Update
            a.btn.btn-danger.float-right(href='/posts/delete/' + post.id) Delete

帖子架构

Field   Type    Null    Key Default Extra
id      int(11) NO      PRI NULL    auto_increment
title   varchar(255)    YES NULL        
body    varchar(255)    YES NULL        
author  varchar(255)    YES NULL    

用户架构

Field     Type         Null        Key    Default     Extra
id        int(11)       NO         PRI    NULL        auto_increment
name      varchar(255)  YES               NULL  
email     varchar(255)  YES               NULL  
username  varchar(255)  YES               NULL  
password  varchar(255)  YES               NULL  

感谢任何帮助。谢谢。

最佳答案

在代码中您进行了 2 个独立的查询: 1)选择相关帖子 2)选择所有用户

使用内连接来实现你想要的。 https://www.w3schools.com/sql/sql_join_inner.asp

你的代码看起来像这样:

// Read A Post
router.get('/:id', (req, res, next) => {
    let sql = `SELECT * FROM posts INNER JOIN users ON posts.userid= users.id WHERE posts.id = ${req.params.id} `;
    let query = db.query(sql, (error, result) => {
        if(error) throw error;
            res.render('post', {
                posts: result,
                author: result
        });
    });
});

关于mysql - 如何仅显示 MySQL 中基于另一个表的列中的一行 - Express JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817604/

相关文章:

Heroku 未检测到 Node.js 应用程序

javascript - Node 错误 : EMFILE

javascript - 如何迭代请求对象中的字符串?

PHP - PDO 参数编号无效

mysql - 优化sql查询分页

php - 本地服务器连接到远程mysql

mysql - 如何在 Optaplanner 中加载 xml

mysql - 如何在nodejs和expressjs中将结果查询的错误消息发送到UI而不是显示在控制台中

javascript - 如何用 nightwatch.js 和 sinon.js 模拟 API 响应?

javascript - 如何让文件继承node.js/express.js中的导出?