如何根据另一个表只显示MySQL中一列的一行 - Express JS

时间:2018-02-15 22:53:07

标签: mysql node.js express

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

我有2张桌子......帖子和帖子用户。 posts表有一个author列,用于在创建帖子时填充用户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
            });
        });
    });
});

posts.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  

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

在代码中

进行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
        });
    });
});