将数据存储在MySQL中

时间:2010-10-29 07:35:58

标签: php mysql

我有一个表单要填写哪个有几个输入文件和20个复选框我的问题是如何组织mysql中所选复选框的记录以及用php搜索它们的最佳方法是什么。你能举个例子吗?

3 个答案:

答案 0 :(得分:3)

MySQL是一个关系数据库,为什么要存储所有这些字符串?

这样的事情:

假设您的复选框水平放置。所以在数据库中这样对待它们是相当直观的。假设您的表单如下:

  1. 您喜欢什么样的食物(可能有多个答案)?

    O Pizza O Pasta O Sushi O Salad

  2. 假设有人喜欢除了寿司以外的所有东西。其他人可能只喜欢寿司

    因此,数据库中的结果表可能如下所示:

    id(PK)  user        question     col      answer
    1       someone     1             1         1
    2       someone     1             2         1
    3       someone     1             3         0
    4       someone     1             4         1
    5       someoneelse 1             3         1
    

    其中answer是一些标志,当选中该框时为1,如果不是则为0。

    我只是猜测你的意思就像每个人一样,所以如果你能更准确地问一下,也许我可以给出更好的答案。

答案 1 :(得分:0)

您可以使用单个BIGINT字段,让每个位代表属性的一个特征。

假设你定义属性如下

 1 = furnished (000001b)
 2 = with garage (000010b)
 4 = new construction (000100b)
 8 = ... (001000b)
16 = ..... (010000b)

因此,如果字段的第一位为1,则表示属性已提供,如果第3位为1,则表示它是新构造,依此类推。

使用按位运算符检查每个特征,即

SELECT * FROM property WHERE characterization & 2

将返回带车库的属性。类似地

SELECT * FROM property WHERE characterization & 5

将返回属于新结构的属性并且也提供(嗯......你明白了:-))。

请记住,BIGINT是64位,因此在同一个字段中不能有超过64种不同的特征。

答案 2 :(得分:-1)

如果他们不在不同的组但有很多选项,那么您可以将它们存储在类似| option1:yes | option2:no | ....的字符串中,您可以轻松查询不同的选项,如WHERE选项LIKE'% | option1:yes |%',或类似的东西。