用php的Mysql动态列

时间:2012-12-07 09:39:10

标签: php mysql

我有一个问题如何在mysql中存储一些数据。 我有网站,当链接被按下时将一些数据传递给php文件,该文件用get和write在数据库(mysql)中读取这些数据。我正在传递campaign_id和未知数量的参数。

http://domain.com/somefile.php?campaignid=1&parameter1=sometext1&parameter2=sometext2&parameter3=sometext3,....etc..

我不知道参数的实际数量,因为用户在某种cms中使用它们。我面临的问题是如何将它们存储在数据库中。我想在下面这样做,但我不确定它是否是正确和最有效的方式:

Combinations Table
-combination_id (Primary key and auto increment)
-campaign_id
-parameter1
-parameter2
-parameter3
-parameter4
-parameter5
-parameter6
-parameter7
-parameter8
-parameter9
-parameter10

在这个例子中,我假设用户不会添加/使用超过10个参数(我认为这是蹩脚的,但我无法获得更好的解决方案)

另外,如果我使用这个设计,我假设我需要检查这个文件,从传递中获取它们并写入数据库,如果每个参数都存在(如果它已经通过)。

5 个答案:

答案 0 :(得分:2)

您必须规范化架构。

假设以下表格:

Entity: id, campaign_id, other fields.
Parameter: id, entityId, parameterValue.

这是多对一的关系。

答案 1 :(得分:1)

如何将所有参数作为json存储在一个表行中?

答案 2 :(得分:0)

您可以尝试这样的事情:

  • combination_id(主键自动增量)
  • campaign_id(索引/外键/不能唯一!)
  • PARAM_NAME
  • param_value

您必须为您获得的每个参数创建一个条目,但理论上您可以添加一千个或更多参数。

虽然可能不是最快的方法,但可能有点难以使用。

答案 3 :(得分:0)

我认为这是nosql数据库的数据类型...至少,试图强制它进入一个sql数据库总是最终成为某种kludge。 (去那里做过......)

据我所见,您有三种不同的存储方式:

  1. 正如你提出的那样。可能是处理它的最简单方法,也可能是最有效的方法。但是,目前你得到了11个参数,你遇到了重大问题......
  2. 创建一个参数表 - parameter_id, - campaign_id参数(如果重要的话,可能的参数名称) - 这为您提供了全面的灵活性 - 但除了搜索单个值之外的所有其他内容变得更加困难,
  3. 组合参数并将它们全部存储在text或varchar字段中。除了搜索单个参数值之外,这可能比1更有效。

    如果我可以添加

  4. 使用具有数组类型的数据库系统,例如postgresql

答案 4 :(得分:0)

如果您不知道将通过网址传输的实际参数数量,则可以选择为 campaign_id 存储无限数量的值。

为此,您可以在表格中创建多个行。像,

insert into table_name values(<campaign_id>,<parameter1>,<sometext>)
insert into table_name values(<campaign_id>,<parameter2>,<sometext>)
insert into table_name values(<campaign_id>,<parameter3>,<sometext>)
insert into table_name values(<campaign_id>,<parameter4>,<sometext>)

假设 campaign_id 在网址中是唯一的。