使用特定格式的值更新MySQl列
我正在开发一个旧的应用程序和mysql数据库,不幸的是,这一切都有点混乱 我对导出所需的列感兴趣,该列包含特定文档的编辑器名称。此列中的值应以特定方式格式化,并且应与当前的值一致 一个文档可以有多个编辑器。我有一个包含所有不同编辑器的表,我需要根据当前(格式不正确的)编辑器值搜索如何匹配这些编辑器。我知道这不是执行此操作的最佳方式(这是应用程序当前的工作方式),但我需要编辑器列的格式如下:使用特定格式的值更新MySQl列,mysql,sql,join,Mysql,Sql,Join,我正在开发一个旧的应用程序和mysql数据库,不幸的是,这一切都有点混乱 我对导出所需的列感兴趣,该列包含特定文档的编辑器名称。此列中的值应以特定方式格式化,并且应与当前的值一致 一个文档可以有多个编辑器。我有一个包含所有不同编辑器的表,我需要根据当前(格式不正确的)编辑器值搜索如何匹配这些编辑器。我知道这不是执行此操作的最佳方式(这是应用程序当前的工作方式),但我需要编辑器列的格式如下: "Surname, Initial. and Surname, Initial. and Surname,
"Surname, Initial. and Surname, Initial. and Surname, Initial"
例如:
但是,该列当前不一致,没有实际的格式:
"J Bloggs, J Doe"
"MJ Smith, J Bloggs and P Jones"
"Williams, S, M.J Smith. Doe, J."
等等
以下是我目前的表格:
文档:
| title | editors |
------------------------------------------------
| doc title 1 | J Bloggs, J Doe |
| doc title 2 | M Smith, J Bloggs and P Jones |
| doc title 3 | Williams, S, M Smith. Doe, J. |
| initial | name |
------------------------
| J. | Bloggs |
| J. | Doe |
| M.J. | Smith |
| P. | Jones |
| S. | Williams |
EITOR:
| title | editors |
------------------------------------------------
| doc title 1 | J Bloggs, J Doe |
| doc title 2 | M Smith, J Bloggs and P Jones |
| doc title 3 | Williams, S, M Smith. Doe, J. |
| initial | name |
------------------------
| J. | Bloggs |
| J. | Doe |
| M.J. | Smith |
| P. | Jones |
| S. | Williams |
出于测试目的,我在Documents表中添加了一列(格式化的编辑器):
| title | editors | formatted_editors |
---------------------------------------------------------------------------------
我需要看起来像这样:
| title | editors | formatted_editors |
---------------------------------------------------------------------------------
| doc title 1 | J Bloggs, J Doe | Bloggs, J. and Doe, J.
| doc title 2 | M Smith, J Bloggs and P Jones | Smith, M.J. and Bloggs, J. and Jones, P
| doc title 3 | Williams, S, M Smith. Doe, J. | Williams, S. and Smith, M.J. Doe, J.
我尝试了以下(和其他各种方法),但似乎没有任何运气-我想这可能与我的分组有关
SELECT d. title, d.editors, group_concat(e.name, ', ', e.initial SEPARATOR ' and ') as formatted_editors
FROM documents d
INNER JOIN editors e
ON d.editors LIKE concat('%', e.name, '%')
WHERE d.editors LIKE concat('%', e.name, '%')
and et.editors LIKE concat('%', e.initial, '%')
GROUP BY et.editors;
任何帮助/建议都将不胜感激,没有“真正”可靠的方法来解决这个问题,那么。。。我使用了一些基本的SQL来修复/匹配我能做的,其余的都是手工完成的
谢谢,
乔恩 如果编辑是按名称引用的,为什么他们会有ID?我想你有大麻烦了。看起来像是
编辑器
字段中的手动输入。如果您希望它是正确的,您可能必须手动检查每个记录并编辑它(您的表有多大?)。你将如何理解M史密斯。
指的是Smith,M.J.
?另外,如果某个地方出现“输入错误”,那么应该采取什么行动?@草莓-抱歉只是我举的一个例子,我现在已经更新了它@bansi我以为会是这样的。。。虽然我希望不是:)我和班西在一起。考虑到输入的可变性质,如果没有一些应用程序级代码,这项任务几乎是不可能的(即使在那时也是相当困难的!),但是如果您要手动清理这项任务,那么您应该利用这段时间正确地规范化数据。