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/

相关文章:

node.js - 亚马逊 AWS Node.js WebSocket

node.js - 如何在后路由中将字符串数组分配给 Mongoose 模型的定义

php - 如何在分页结果时让查询转移到后续页面

mysql - 用于链接图的 NoSQL 或 SQL

php - 如何使我的表单输入在使用空查询输入时不返回任何结果?

javascript - 自动导出 Node 功能的最佳实践

javascript - 赠品功能

node.js 转发来自 'net' 服务器的 http 请求来表达

javascript - 在 NodeJS 身份验证成功后使用 Nginx 提供静态内容

Mysql如何通过使用其他列的日期中的列和年份来添加唯一键