MySQL:从文件关联重新排序行

时间:2012-03-27 03:48:27

标签: mysql

MySQL照片库脚本要求我通过将每个图像标题与表示所需顺序的数字配对来提供我的图库的显示顺序。


我有一个名为pairs_list.txt的正确排序数据列表,如下所示:

#   title          correct data in list
--  -------
1   kmmal
2   bub14
3   ili2
4   sver2
5   ell5
6   ello1
...

因此,首先显示kimmals图片,然后显示bub14图片等。


我的名为title_order的MySQL表具有相同的标题,但它们没有与正确的数字配对:

#   title          bad data in MySQL
--  -------
14  kmmal
100 bub14
31  ili2
47  sver2
32  ell5
1   ello1
...

如何创建一个MySQL脚本,它将查看pairs_list.txt中正确的数字 - 标题配对,并遍历title_order的每一行,用正确的数字替换每一行?换句话说,如何使MySQL表的顺序看起来像文本文件的顺序?

在伪代码中,它可能看起来像这样:

  1. 获取MySQL行标题
  2. pair_list.txt搜索此标题
  3. 在列表
  4. 中获取正确的数字 - 标题对
  5. 用正确的数字替换MySQL号码
  6. 重复所有行
  7. 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果这不是一次性任务但经常被称为函数,那么也许你可以有以下场景:

  1. 创建临时表,使用mysql load data infile函数将pairs_list.txt中的所有值插入此临时表。
  2. 在该临时表上创建一个过程(或者可能是插入触发器?),它将根据插入的内容更新主表。
  3. 在该过程(或插入触发器)中,我将有一个游标从临时表中获取所有值,并从该游标中的每个值更新主表上的选定标题。
  4. 从临时表中删除所有内容

答案 1 :(得分:1)

我建议你这么做 -

1 title_order表中删除所有主键和唯一键,并在title字段上创建唯一索引(或主键) -

ALTER TABLE title_order
  ADD UNIQUE INDEX UK_title_order_title (title);

2 使用LOAD DATA INFILE和REPLACE选项从文件加载数据并替换 -

LOAD DATA INFILE 'pairs_list.txt'
    REPLACE
    INTO TABLE title_order
    FIELDS TERMINATED BY '  '
    LINES TERMINATED BY '\r\n'
    IGNORE 2 LINES
    (@col1, @col2)
    SET order_number_field = @col1, title = TRIM(@col2);

...在LOAD DATA INFILE命令中指定所需的属性。