0

我有一个表格用于更新下表 LoationName= $locationName

+--------+---------------------+--------------+------+
|Id |LocationName|TaskComplete | TaskNotes           |
+--------+---------------------+--------------+------+
|001| NYC,FRA,UK |no,yes,no    |NULL,Task Completed-FRA,NULL
|002| NYC,FRA,UK |no,no,yes    |NULL,NULL,task-completed @ UK
|003| NYC,FRA,UK |no,no,yes    |NULL,Task-started-FRA,completed Mar 3rd

如何使用与正确 locationName 对应的信息更新 task-complete 和 task-notes col?如果 NYC 更新其状态,则表应更新为

+--------+---------------------+--------------+------+
|Id |LocationName|TaskComplete | TaskNotes           |
+--------+---------------------+--------------+------+
|001| NYC,FRA,UK |yes,yes,no   |NYC NOTES,Task Completed-FRA,NULL
|002| NYC,FRA,UK |yes,no,yes   |NYC-Finished task2,NULL,task-completed @ UK
|003| NYC,FRA,UK |yes,no,yes   |Completed-Tuesday,Task-started(FRA),completed Mar 3rd

我总共有 100 项任务必须由 25 个地点完成。下面的 UPDATE 语句可以,但在我们的场景中不起作用,因为它只是用单个值(即“yes”或“no”)更新 col。

UPDATE operations_checklist SET TaskComplete='$val' where TaskId IN($i)

我在想我的解决方案是分解 TaskComplete 值,然后使用 array_replace 更新必要的值/位置。最好的解决方案是什么?

我最终可能会创建一个表格,其中包含 77 个用于 TaskName 的 cols、77 个用于 TaskNotes 的 cols、77 个 cols completeDate 等等......想法?

4

1 回答 1

1

由于 MySQL 中没有内置 SPLIT 函数,因此使用查询来执行此操作是不可接受的,您需要自己编写一个 FUNCTION 或编写一个很长的无用算法来使用内置函数来执行此类操作...

我强烈建议您使用 php 作为您自己所说的并爆炸您的数据,替换您想要的内容,然后将其内爆并更新您的记录...

更新 只是关于您的表结构的注释,您可以这样做来代替您当前的结构:

创建具有此结构的第二个表:

+----+----------+------------+
| FK | TaskType | TaskStatus |
+----+----------+------------+
| 1  | 1        | True
| 1  | 2        | False
| 2  | 1        | False

该表将通过 FK 链接到您的主表,而不是在其中的字段中使用 ~70 逗号,在此使用 TaskType 1、2、...、70,并将 TaskStatus 设置为 true 或 false 表示是和否,缺少 FK 的 TaskType 也意味着这里没有 ...

于 2012-09-16T17:52:47.890 回答