我有一个用于更新下表的表单,其中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语句是可以的,但在我们的场景中不起作用,因为它只是用单个值更新col,即(“是”或“否”)。
UPDATE operations_checklist SET TaskComplete='$val' where TaskId IN($i)
我认为我的解决方案是EXPLODE TaskComplete值,然后使用array_replace更新必要的值/位置。什么是最好的解决方案?
我最终可能会为TaskName创建一个包含77个列的表,为TaskNotes创建77个列,使用77个cols完成日期等等...想法?
答案 0 :(得分: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为yes不,没有FK的TaskType也意味着没有......