存储多个布尔字段

时间:2013-03-05 18:15:32

标签: php mysql json

我的观点如下:
我有一个存储事件的MySQL数据库。这些事件可能发生在一周的不同日子。你可以说它看起来如下:

Day | Active
Mon | yes
Tue | yes
Wed | no
Thu | no
Fri | yes
Sat | no
Sun | no

现在我不完全确定如何将其保存到数据库中。当然有几种可能性,但我看到了我能想到的一切的缺点:

  • 将它们存储为Bool类型的7个字段(似乎有很多类似的字段)
  • 将它们存储为7位数字(这样我只需要一个整数,但这需要一些努力才能转换并且缺乏可读性)。

在C ++中,这些数据可以存储到std :: bitset中。我打赌在MySQL中可以使用一些东西......请指出我:)

PS:
我不知道它是否重要:数据将用PHP读取并作为JSON提供给外部世界。

3 个答案:

答案 0 :(得分:3)

您可以使用SET类型(http://dev.mysql.com/doc/refman/5.0/en/set.html)。例如,这就是您的表格所示:

+-------------+--------------------+
| event_name  | days               |
+-------------+--------------------+
| some event  | 'monday,friday'    |
+-------------+--------------------+
| another one | 'tuesday'          |
+-------------+--------------------+

从这种表中选择行很容易,对于潜伏在数据库中的任何人来说,它都是真的可读。

答案 1 :(得分:2)

你应该多使用int的想法。在你的php中,你可以将掩码定义为常量,然后使用按位运算来确定设置了哪些标志。

所以不要做像

这样的事情
myvar & 0x010

看起来更像是在使用常量

myvar & IS_MONDAY

答案 2 :(得分:0)

如果您的条目仅用于存储您提供的输入的每周事件,为什么不创建VARCHAR字段并将其存储为JSON字符串:     {“Mon”:“yes”,“Tue”:“yes”,“Wed”:“no”,“Thu”:“no”,“Fri”:“yes”,“Sat”:“no”,“太阳“:”没有“}