我想在一个MYSQL字段中插入一个以上的值(更多的类别),以便在之后过滤它们。
router.get("/createtable", (req, res) => {
let sql =
"CREATE TABLE entries(id int AUTO_INCREMENT PRIMARY KEY,categories VARCHAR(255), title VARCHAR(255), kindof VARCHAR(255), image01 VARCHAR(255), image02 VARCHAR(255), image03 VARCHAR(255), website VARCHAR(255))";
let query = connection.query(sql, (err, result) => {
if (err) throw err;
console.log(result);
res.header("Access-Control-Allow-Origin", "*");
res.send("Table created");
});
});
创造完美的工作。
router.post("/addentry", (req, res) => {
// I give to mysql this object:
let entry = {
categories: [req.body.categories], // I tried to give it as an array
title: req.body.title,
kindof: req.body.kindof,
image01: req.body.image01,
image02: req.body.image02,
image03: req.body.image03,
website: req.body.website,
};
let sql = "INSERT INTO entries SET ?";
let query = connection.query(sql, entry, (err, results) => {
if (err) throw err;
console.log(results);
res.header("Access-Control-Allow-Origin", "*");
res.send("Entry added to MauerApp DB");
});
});
使用一个值可以很好地工作:'category1'
。 但当我尝试插入更多('category1,category2')
时,它会返回给我:
code: 'ER_OPERAND_COLUMNS',
[0] errno: 1241,
[0] sqlMessage: 'Operand should contain 1 column(s)',
[0] sqlState: '21000',
[0] index: 0,
[0] sql: "INSERT INTO entries SET `categories` = ('clothing', 'jewerly'), `title` = '1', `kindof` = 'design', `image01` = '3', `image02` = '4', `image03` = '5', `website` = '2'"
[0] }
知道吗? 谢啦!
首先,在一个列中有多个值不是一个好的设计。
请阅读https://en.wikipedia.org/wiki/first_normal_form。
应将其拆分为两个表:entries和categories,并在categories表中添加外键“id”以将其链接到entries; 因此可以为同一条目设置多个类别。
如果必须在同一列中执行此操作(不建议高度执行),则需要将req.body.categories中的所有值串联起来
要么你:
它可以是一个json,序列化的数组(不推荐),也可以是一个被聚合器分割的字符串(例如逗号)。