el-table实现两个表格的关联连接(类似数据库的左连接关系)

2023.2.7今天我学习了如何使用el-table实现两个表格之间的关联连接。

首先什么是关联关系:

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

效果:

表一:

 表二:

 连接的新表一:

 我们可以看到相同的键名是【ccc】,对应的相同的值是【33】和【66】。然后相关的数据就会被关联起来,没有相关的数据就会Push到新的一行。

为了防止其他键名出现重复,需要把通用的键名删除,如(id,time等),只留下字段名就好,如(col_a,col_b,col_c)。

js删除不需要的键名代码如下:

// 去掉原表格数据不需要的字段
        const data_List = this.dataList.map((item, index, arr) => {
          delete item.id
          delete item.created_at
          delete item.updated_at
          delete item.version
        })

        // 去掉添加数据不需要的字段
        const add_data_List = remarkName.map((item, index, arr) => {
          delete item.id
          delete item.created_at
          delete item.updated_at
          delete item.version
        })

js代码如下:

 const demo = (arr1, arr2) => {
          const res = []
          // 扩展数组
          const arr = [...arr1, ...arr2]
          // 合并数组获取所有的keys
          const keys = Object.keys(Object.assign({}, ...arr))
          // 创建一个基础的数据展示
          const base = keys.reduce((r, k) => {
            r[k] = undefined
            return r
          }, {})
          // 通过key 转化为map映射
          const keyMap = keys.reduce((map, cur) => {
            map[cur] = {}
            return map
          }, {})
          arr.forEach(item => {
            // 获取当前对象的键值对数组
            const itemArr = Object.entries(item)
            // 查找是否在映射中出现
            const keyVal = itemArr.find(([k, v]) => keyMap[k][v])
            if (keyVal) {
              // 如果在映射中出现 那么通过路径进行合并
              const [key, value] = keyVal
              Object.assign(keyMap[key][value], item)
            } else {
              // 如果没出现那就创建一个全新的数据
              const data = { ...base, ...item }
              res.push(data)
              itemArr.forEach(([k, v]) => keyMap[k][v] = data)
            }
          })
          return res
        }
        let newData = demo(this.dataList,remarkName)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Element-UI 的 el-table 组件本身并不提供连接数据库读数显示的功能,需要借助后端框架和数据库操作来实现。以下是一种基于 Node.js 和 MySQL 数据库实现方法。 1. 安装依赖 首先需要安装 Node.js 和 MySQL 数据库,并在 Node.js 项目中安装 mysql2 和 express 两个依赖。可以通过以下命令安装: ``` npm install mysql2 express ``` 2. 连接数据库 在 Node.js 项目中,通过 mysql2 模块连接 MySQL 数据库,例如: ```js const mysql = require('mysql2') const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'my_database', }) connection.connect() ``` 上面的代码中,我们使用 createConnection 方法创建了一个 MySQL 数据库连接,并通过 connect 方法连接数据库。需要根据实际情况填写 host、user、password 和 database 等参数。 3. 查询数据 连接数据库成功后,可以使用 SQL 语句查询数据并返回给前端。在 Node.js 项目中,可以使用 express 框架监听 HTTP 请求,并在请求中查询数据库并返回数据。例如: ```js const express = require('express') const mysql = require('mysql2') const app = express() const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'my_database', }) connection.connect() app.get('/data', (req, res) => { connection.query('SELECT * FROM my_table', (error, results) => { if (error) { console.error(error) res.sendStatus(500) } else { res.json(results) } }) }) app.listen(3000, () => { console.log('Server is running on http://localhost:3000') }) ``` 上面的代码中,我们使用 express 框架监听了 /data 路径的 GET 请求,并在请求中查询了 my_table 表的所有数据,并通过 res.json 方法将数据返回给客户端。 4. 在 el-table 中展示数据前端页面中,可以通过 axios 或其他 HTTP 请求库向后端发送请求,并将返回的数据展示在 el-table 中。例如: ```js <template> <div> <el-table :data="tableData"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </div> </template> <script> import axios from 'axios' export default { data() { return { tableData: [], } }, mounted() { axios.get('/data').then(response => { this.tableData = response.data }).catch(error => { console.error(error) }) }, } </script> ``` 在上面的代码中,我们使用 axios 发送了一个 GET 请求到 /data 路径,并在请求成功后将返回的数据赋值给 tableData 属性,以展示在 el-table 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码无敌小奶龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值