2

我正在一个列出各种餐馆目录的网站上工作,目前正在切换到更新的 CMS。我遇到的问题是两个 CMS 都以不同的方式表示餐厅数据。

旧版内容管理系统

一个交叉引用数据库,因此它可以列出如下示例的条目:

ID/FieldID/ItemID/数据

3 / 1 / 6 / 123 富街

4 / 2 / 6 / 条

一个引用表,将 FieldID 1 引用为街道,将 FieldID 2 引用为城市。

另一个引用表,将 ItemID 6 引用为 Delicious Restaurant。

新内容管理系统

当我设置示例列表时,数据库在新 CMS 上的方式是所有直接行,没有交叉引用。因此,同一家餐厅的数据将是:

身份证/姓名/街道/城市

3 / 美味餐厅 / 富街 123 号 / 酒吧


大约有 2,000 个餐厅列表,因此就 SQL 行数据大小而言,这并不是一个庞大的数量,但当然足以甚至不考虑手动重新输入所有餐厅列表。

我有一些想法,但它会非常肮脏并且需要一段时间,而且我不是 MySQL 专家,所以我在这里提供一些我应该如何解决它的想法。

非常感谢那些可以提供帮助的人。

4

1 回答 1

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'

您没有为所有表提供名称,所以我提出了一些名称。如果您有更多需要提取的字段,扩展这种查询应该很简单。

于 2009-10-20T02:17:52.923 回答