提问者:小点点

MySql-在一个字段中插入多个值


我想在一个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] }

知道吗? 谢啦!


共2个答案

匿名用户

首先,在一个列中有多个值不是一个好的设计。
请阅读https://en.wikipedia.org/wiki/first_normal_form。
应将其拆分为两个表:entries和categories,并在categories表中添加外键“id”以将其链接到entries; 因此可以为同一条目设置多个类别。

如果必须在同一列中执行此操作(不建议高度执行),则需要将req.body.categories中的所有值串联起来

匿名用户

要么你:

  • 将数组类别转换为字符串。

它可以是一个json,序列化的数组(不推荐),也可以是一个被聚合器分割的字符串(例如逗号)。

  • 创建一个表,用作条目和类别之间的数据透视。