Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用特定格式的值更新MySQl列_Mysql_Sql_Join - Fatal编程技术网

使用特定格式的值更新MySQl列

使用特定格式的值更新MySQl列,mysql,sql,join,Mysql,Sql,Join,我正在开发一个旧的应用程序和mysql数据库,不幸的是,这一切都有点混乱 我对导出所需的列感兴趣,该列包含特定文档的编辑器名称。此列中的值应以特定方式格式化,并且应与当前的值一致 一个文档可以有多个编辑器。我有一个包含所有不同编辑器的表,我需要根据当前(格式不正确的)编辑器值搜索如何匹配这些编辑器。我知道这不是执行此操作的最佳方式(这是应用程序当前的工作方式),但我需要编辑器列的格式如下: "Surname, Initial. and Surname, Initial. and Surname,

我正在开发一个旧的应用程序和mysql数据库,不幸的是,这一切都有点混乱

我对导出所需的列感兴趣,该列包含特定文档的编辑器名称。此列中的值应以特定方式格式化,并且应与当前的值一致

一个文档可以有多个编辑器。我有一个包含所有不同编辑器的表,我需要根据当前(格式不正确的)编辑器值搜索如何匹配这些编辑器。我知道这不是执行此操作的最佳方式(这是应用程序当前的工作方式),但我需要编辑器列的格式如下:

"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我以为会是这样的。。。虽然我希望不是:)我和班西在一起。考虑到输入的可变性质,如果没有一些应用程序级代码,这项任务几乎是不可能的(即使在那时也是相当困难的!),但是如果您要手动清理这项任务,那么您应该利用这段时间正确地规范化数据。