我用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
感谢任何帮助。谢谢。
答案 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
});
});
});