如何在SQL字段中处理数组?

时间:2012-09-24 15:24:01

标签: php mysql codeigniter

我有一个源自佛罗里达州的CSV,我需要每天加载到MySQL中。这是我所在地区所有待售房屋的清单。一个字段有一个代码列表,以逗号分隔。这是一个这样的样本:

C02,C11,U01,U02,D02,D32,D45,D67

这些代码都意味着某些东西(池,围栏等),我在一个单独的表中有含义。我的问题是,我应该如何处理这些?我应该将它们放在自己的字段中,因为它们在CSV中吗?我应该创建一个单独的表来保存它们吗?

如果我将它们保留在字段中(称为feature_codes),我怎样才能从具有描述的表中获取描述?该表只是feature_code,feature_code_description。我不知道如何在我的第一个查询中将它们分开以进行连接以将描述带入。

谢谢

3 个答案:

答案 0 :(得分:4)

作为一般规则,csv数据永远不应存储在字段中,特别是如果您确实需要考虑csv数据的各个位,而不仅仅是csv字符串作为一个整体。

您应该对设计进行规范化,并将每个子“字段”拆分为自己的表格。

话虽这么说,MySQL确实有find_in_set(),它允许你对那些csv字符串进行排序搜索,并将每个字符串视为自己的不同数据。使用它并不是特别有效,但它确实在设计上加了一个绑带。

答案 1 :(得分:0)

您可以使用explode()分隔CSV字符串:http://php.net/manual/en/function.explode.php

$string = 'C02,C11,U01,U02,D02,D32,D45,D67';
$array  = explode(',', $string);

然后使用feature_codes列表,您可以轻松检索feature_code_description,但是您需要执行另一个查询以获取包含所有feature_codes和feature_code_description的数组。

或者拆分你的字段并将其放在另一个带有home_id的表中。

答案 2 :(得分:0)

您可以将其保存在您的数据库中,当您读出它时,您可以运行php函数explode。去检查一下这个功能。它将为您构建一个数组,用于根据您想要的值分隔值。在您的情况下,您可以使用:

$array_of_codes = explode(",", $db_return_string);

这将使每个代码中的数组与它们之间的逗号分隔开来。祝你好运。