我使用 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/