我正在使用CodeIgniter的日历类构建一个可用性日历。我正在为每个月的每一天生成复选框:
[ ] Morning
[ ] Afternoon
[ ] Evening
用户可以勾选或取消勾选某一天的可用性。POST数组看起来像这样:
Array (
[2011-12-01] => Array (
[morning] => 1
[afternoon] => 1
)
[2011-12-02] => Array (
[evening] => 1
)
)
MySQL表中的数据看起来像这样:
ID | date | data
- - - - - - - - - - - - - - -
1 | 2011-12-01 | 1-1-0
2 | 2011-12-02 | 0-0-1
数据值为上午-下午-晚上0或1。
如果某一天(0-0-0)没有可用性,则该行不需要存在。我的解决方案是删除当月的所有行,然后插入每一天的所有值(例如1-0-0)。最多可以插入31个查询。
:在不运行大量查询的情况下更新表的最佳解决方案是什么?
提前感谢!
p。我也不完全确定数据的存储方式。如果我想在将来使用jquery/ajax更改时更新它,也许一天中每个部分的不同行会更容易。我也希望你对此有一些想法。
我要做的第一件事是分隔数据字段,使其更易于人类阅读。这样就可以了:
ID | date | is_morning | is_afternoon | is_evening
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 | 2011-12-01 | 1 | 1 | 0
2 | 2011-12-02 | 0 | 0 | 1
其次,我不会担心对数据库运行31次insert或update。我不确定您的环境,但是我运行过一些脚本,这些脚本对数据库更新数百、数千甚至数万次插入/更新。我从来没有注意到任何小到31查询的性能问题。