【问题标题】:Take data between a comma from a SQL row PHP从 SQL 行 PHP 中获取逗号之间的数据
【发布时间】:2013-10-21 17:06:44
【问题描述】:

我即将编写这段代码,它将数字存储在数据库中,例如它是 1、2、3、4。我知道如何将它存储在数据库等中,但我需要知道如何将这些数字从数据库中取出,每个人都可以将其用作变量。

示例: 数据库有一个名为 IDs 的列,IDs 包含以下内容: 1,2,3,4,5 在 PHP 中,我想获取列 ID 中的每个数字,因此每个数字都有一个变量。 $变量 = 1; $变量 = 2; 等等

【问题讨论】:

  • 你不应该在你的数据库中存储这样的数据,因为它不会以这种方式被规范化。你应该关注this link 并尝试重新规划整个事情。

标签: php sql arrays mysqli


【解决方案1】:

explode() 可以将字符串解析为一个变量数组,每个数字一个数组元素。

$str = '1,2,3,4,5';
$arr = explode(',', $str);

echo $arr[0]; // 1
echo $arr[1]; // 2
echo $arr[2]; // 3
echo $arr[3]; // 4
echo $arr[4]; // 5

但是,在数据库中存储 ID 字符串通常是不可取的。通常有更好的数据库结构可以使用。

例如,通过使用附加表来关联其他两个表中的行:

customers ( id, name, date_of_birth )

customer_addresses ( id, line1, line2, town, city )

customer_address_assoc ( customer_id, customer_address_id )

使用explode 方法,您可能已经在客户表中存储了一个字段,例如address_ids。但是通过使用关联表,这是一个更好的结构。它更容易查询、更快并且通常更优化。关联表将为与客户关联的每个地址存储一行。

【讨论】:

  • 非常感谢,能不能给我解释一下可以使用的更好的数据库结构?
  • 但它可能有数百行。需要做很多工作。
  • 数百行没有问题,因为您只存储 ID。 MySQL 可以通过这种方式处理数百万行。
  • 存储 int 比存储 varchar 需要更少的内存。正如我在之前的评论中所说,您应该规范化您的数据库。 Check this out
  • 看起来很有趣,会研究一下,谢谢大家。我真的很感激。
【解决方案2】:

最好的方法是使用 foreach 循环,但这取决于您的需要。

这个例子呼应了你所有的数字:

<?php 

                            foreach($querynumberas $number){                                
                            $id = $number['id'];
echo $id;
}

?>

但这并没有存储您需要的所有变量,所以要做到这一点,您应该使用以下构造:

<?php 
for ($i = 1; $i <= array.lenght(); ++$i) {
   ${'number'.$i} = $number['number'.$i]; // it stores: number1 = 1; number2 = 7; ecc

    }

php?>

【讨论】:

  • 这不会让服务器像地狱一样滞后吗?我正在考虑一个具有数据变量的函数,例如像 mrcode 告诉我的那样爆炸。不过感谢这个新想法。
  • for 周期滞后?不,我不认为。滞后通常是由于多个 sql 查询造成的,但他的代码中有一个,我的代码中有一个。您要求变量宽度不同的名称,MrCode 给出了一个存储位置数字的数组,我只是回答了您的要求。 :-)
  • 我不想要不同名称的变量,只是不知道如何解释得很好。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2011-12-09
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多