【问题标题】:ColdFusion ValueList from SQL来自 SQL 的 ColdFusion ValueList
【发布时间】:2013-01-29 10:21:15
【问题描述】:

我正在尝试在 ColdFusion 中创建一个值列表。基本上,我希望用户能够将他们的乐队成员输入到各个字段中。然后在提交时,任何存在的值都作为字符串而不是单个文本值存储到我的数据库中。从数据库中检索它时,运行它并使用逗号作为分隔符并再次单独拆分值。在纸上和我的脑海中,这听起来很简单,但我无法理解它。任何帮助将不胜感激:)

【问题讨论】:

  • 能否提供示例/具体说明用户将输入的内容以及您希望该输入如何存储在数据库中?
  • 我真的不知道如何回应,因为我还没有真正创建它,我想使用输入字段,我已经想出了一个增加/减少的方法我现在需要制作表单中的字段数量,以便使用逗号作为分隔符将这些字段值转换为字符串,例如。 “约翰”“卢克”“鲍勃”变成“约翰,卢克,鲍勃”并存储在数据库中,然后当在网站上再次调用时,我想运行将“约翰,卢克,鲍勃”拆分回的代码“约翰”“卢克”“鲍勃”。如果你还和我在一起哈哈很困惑。
  • 如果您想将“John,Luke,Bob”存储为一个单独的值,您应该多考虑一下。以这种方式处理您的数据将更加困难。
  • 这是我真正能做到的唯一方法,基于一个乐队可以有八名成员而不是二重唱的假设来创建多余的字段是不可行的。我宁愿将值存储到一个字符串中,这意味着我只有一个数据库条目,我知道有一种方法可以通过单词列表并挑选出每个单独的单词,这只是实现它的问题。
  • 您不会创建额外的列(即字段)。数据将存储在行中,band id 为 FK。因此,一个乐队可以根据需要拥有尽可能多或尽可能少的成员。数据库经过优化,可以处理行(或数据集)——而不是列表。如果您期望做任何事情超出简单的select(搜索、删除、更新),那么您几乎肯定最好 存储列表。查询列表很麻烦且容易出错。更不用说更慢了,因为除了简单的选择之外的任何事情都需要复杂的 sql。我会强烈建议您重新考虑该设计。

标签: jquery sql coldfusion


【解决方案1】:

如果您真的想采用该解决方案,您可以简单地使用 listToArray+cfloop 或仅使用 cfloop 来获取个人名称:

<CFSET list_names = "John ,Luke, Bob" /> <!--- this should be the value from your db field --->
<CFSET array_names = listtoarray(list_names) />

<CFLOOP array="#array_names#" index="name">
    #name# is in the band<br />
</CFLOOP>

或者直接使用列表并循环它:

<CFSET list_names = "John ,Luke, Bob" /> <!--- this should be the value from your db field --->

<CFLOOP list="#list_names#" index="name">
    #name# is in the band<br />
</CFLOOP>

但是……我会把乐队成员的名字保存在一个单独的表中——比如:

bands:

| id | bandname  |
+----+-----------+
| 1  | The Hives |

bands_members:

| band_id | name                   |
+---------+------------------------+
|   1     | Howlin’ Pelle Almqvist |
|   1     | Nicholaus Arson        |
|   1     | Vigilante Carlstroem   |

【讨论】:

  • 是的,我同意,您的乐队成员应该与包含乐队的表格分开。然后,您可以在公共 ID 上将它们“加入”到 SQL 中。我会避免将乐队成员作为字符串存储在乐队表的列中。为了将来的目的,最好也有这种“一对多”的关系。
  • 我知道你来自哪里,有一个单独的乐队成员表,其中唯一的乐队 ID 链接正确的乐队成员,所以说如果乐队中有 8 名成员,他们就会有那个乐队 ID他们在这个单独的表格中的字段。我现在和你在一起。非常感谢!
【解决方案2】:

对于兜售我自己的(免费和开源)产品表示歉意,DataMgr 有一些东西可能对这种情况特别有吸引力。

您可以传入一个逗号分隔的列表,它会将列表适当地保存为相关表中的行。

因此,您可以有一个“bands”表、一个“players”表、一个连接它们的“band2players”表。如果是这样,您可以有一个可用玩家复选框(称为“玩家”)。

然后,当您提交您的乐队时,您可以在 Form.id 中启动一个 band_id(例如)并执行以下操作:

 <cfset Application.DataMgr.SaveRelationList("band2players","band_id",Form.id,"player_id",Form.players)>

http://www.bryantwebconsulting.com/docs/datamgr/save-many-to-many-relationships.cfm

通过一些额外的工作,您甚至可以在 DataMgr 中设置一个“关系字段”,以使 DataMgr 的行为就像“bands”表有一个“players”字段一样,即使它实际上只是访问“bands2players”数据在后台。这将允许您使用逗号分隔的列表进行保存和检索。如果你想要一个文本区域而不是复选框列表,你甚至可以使用名称而不是 id。

http://www.bryantwebconsulting.com/docs/datamgr/lists.cfm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多