首页 > 解决方案 > 如何在 mySQL 数据库中存储长度未知的数组

问题描述

这将是一个很长的“问题”,但我对如何做到这一点有 0 个想法,所以也很难提出这个问题:

我正在尝试做的事情: 我想制作可以从中上传产品的管理页面。为此,我有幻灯片的文件输入。该图像将发送到我的 node.js 后端,我将该文件保存在我的 public/uploads 目录中。然后将路径文件路径发送回前端并与其他幻灯片的其他链接一起添加到数组中,当我按下提交按钮时,该数组被发送到后端。我想将该数组保存在 mySQL 中。

我发送到后端要上传的数组是

[
  'uploads/slideshows/nbvnbvdnvvbnSlideshow.jpg',
  'uploads/slideshows/nbvnbvdnvvbnSlideshow2.jpg',
  'uploads/slideshows/nbvnbvdnvvbnSlideshow3.jpg',
  'uploads/slideshows/nbvnbvdnvvbnSlideshow4.jpg',
  'uploads/slideshows/nbvnbvdnvvbnSlideshow5.jpg'
]

并称为幻灯片路径。

数组的长度因幻灯片而异,所以我不能使用:

db.query(
        'INSERT INTO slideshowarrays VALUES (?,?,?,?,?)',  
        slideshowPaths
)

我尝试使用类似的东西:

db.query( 
        `INSERT INTO slideshowarrays VALUES (${'?'+',?'.repeat(slideshowPaths.length - 1)})`, 
        slideshowPaths
)

但这也会引发错误ER_WRONG_VALUE_COUNT_ON_ROW。老实说,我什至不知道该怎么做。

我的表: MySQL 数据库表 只有link1NN并且 7 是我将使用的最大链接数。

非常抱歉,如果我提出这个问题非常糟糕,如果您需要澄清,请在下面的评论中提问。如果您能告诉我任何解决方案,无论多么肮脏,我将不胜感激。

标签: mysqlsqlnode.js

解决方案


我不会设计这个将五个图像插入同一行的五个列中。如果您需要包含六张或八张或十张图片的产品怎么办?您需要扩展您的表格以拥有更多列。您总是想知道明天您是否需要支持比列数多一张图片的产品。

相反,将每个图像存储在自己的行中。然后,您只需要一列作为图像名称。您循环输入并为每个图像执行一次 INSERT,为每个图像插入一个新行。然后,您可以为每个产品支持任意数量的图像,而无需在表格中添加列。

这是典型的一对多关系:您需要第二个表。您将产品详细信息存储在products表中,然后在product_images表中存储多行。


推荐阅读