gpt4 book ai didi

php - 如何将数据从一张表移至 MySQL (MariaDB) 中的 EAV 结构

转载 作者:行者123 更新时间:2023-11-29 16:03:56 24 4
gpt4 key购买 nike

我是 php/mysql 的新手,作为自己学习编程的一个项目,我正在尝试在 Xampp 上的 php 中创建一种价格比较引擎。

目前我正在处理导入端。我想将商家提要导入到 EAV 设计的数据库 (Mariadb) 中。我正在尝试将数据从临时 (tmp) 表移动到其他 3 个表。商家 Feed 数据已加载到“tmp”中,并且需要移动到其他表中。

我拥有的是这样的:

tmp(临时转储 csv 文件)

tmp.ean

tmp.isbn

tmp.color

tmp.dimensions

tmp.image

tmp.upc

tmp.price

tmp.stock

tmp.merchant

t1(产品基本信息表)

t1.ean (unique)

t1.isbn

t1.upc

t2(价格和库存表)

t2.ean (FK)

t2.price

t2.stock

t2.merchant

t3(属性表)

t3.ean (FK)

t3.color

t3.dimensions

t3.image

目前我有填充 t1 的代码

用 tmp 中的数据填充 t1

1) 我首先将 ean 列从 tmp.ean 复制到 t1.ean 以添加新产品。2)在第二次运行时,我用 tmp 表中的数据填充列 t1.isbn 和 t1.upc,其中 tmp.ean = t1.ean。这部分有效,独特的产品被添加到 t1 表中。

我想做的是将数据添加到 T2 和 T3,在这些表中 ean 不是唯一的,因为每个 ean 可以有更多属性,每个 ean 可以有更多价格(商家)我想这样做:

更新 t2 中的价格/库存:

1) 将 tmp.ean 添加到 t2.ean(不存在 EAN 和 Merchant)。因此,当没有 ean 存在且具有该 ean 和商家 ID 时,请添加 ean2) 将 tmp.stock tmp.price 添加到 t2.stock t2.price,其中 tmp.ean = t2.ean AND tmp.Merchant 是 t2.merchant

更新 t3 中的属性:

1) 将 tmp.ean 添加到 t3.ean,其中不存在 EAN 和 t3.color(实体)。因此,当没有 ean 存在该属性(颜色)时添加 ean2)将tmp.color(值)添加到t3.color,其中tmp.ean = t3.ean AND tmp.color = t3.color

我走的路正确吗?还是我让事情变得太复杂了,有没有更简单/更快的方法来做到这一点,以及最好使用哪些sql查询命令,UPDATE、INSERT、JOIN?可能有数百万种产品和许多进口产品,因此速度将成为一个问题。

最佳答案

MariaDB 的动态列是 JSON 的前身,它现在存在于 MySQL 和 MariaDB 的最新版本中。

您暗示您正在获取 EAV,但您的示例仅显示颜色尺寸。 JSON 字符串可以方便地收集变量属性集(光圈值、服装尺寸、发动机缸数、卡路里等),但对于搜索方便在其中任何一个上。诸如颜色和​​尺寸之类的内容可能足够通用并且经过足够多的搜索以保证拥有自己的列。这是 EAV compromise .

当两个表具有相同 PRIMARY KEY (ean) 时,将它们保留为两个表并不明智。相反,通常最好制作一个表。

是的,加载数据时,通常明智的做法是加载到临时表中,然后清理数据并移动到其他表。

关注标签以进行更多讨论。您可能会发现其他对您的项目有用的提示。

关于php - 如何将数据从一张表移至 MySQL (MariaDB) 中的 EAV 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com