我正在一个列出各种餐馆目录的网站上工作,目前正在切换到更新的CMS。我遇到的问题是,两个CMS都以不同的方式表示餐馆数据。
交叉引用数据库,因此它可以列出一个如下示例的条目:
ID / FieldID / ItemID / data
3/1/6/123 Foo Street
4/2/6 / Bar
将FieldID 1引用为街道,将FieldID 2引用为城市的一个参考表。
将ItemID 6引用为Delicious Restaurant的另一个参考表。
当我设置示例列表时,数据库在新CMS上的方式是所有直接行,没有交叉引用。因此,相同餐厅的数据将是:
ID /姓名/街道/城市
3 /美味餐厅/ 123 Foo Street / Bar
大约有2,000家餐馆列表,因此在SQL行数据大小方面不是很大,但当然甚至不能考虑手动重新输入所有餐馆列表。
我有一些想法,但它会非常脏,需要一段时间,而且我不是MySQL专家,所以我在这里提出一些想法,我应该如何处理它。
非常感谢那些可以提供帮助的人。
答案 0 :(得分:3)
您可以多次加入数据表以获得以下内容:
insert into newTable
select oldNames.ItemID,
oldNames.Name,
oldStreets.data,
oldCities.data
from oldNames
inner join oldData as oldStreets on oldNames.ItemID = oldStreets.ItemID
inner join oldData as oldCities on oldNames.ItemID = oldCities.ItemID
inner join oldFields as streetsFields
on oldStreets.FieldID = streetsFields.FieldID
and streetsFields.Name = 'Street'
inner join oldFields as citiesFields
on oldCities.FieldID = citiesFields.Field
and citiesFields.Name = 'City'
你没有为所有表提供名字,所以我写了一些名字。如果您需要提取更多字段,则扩展此类查询应该是微不足道的。