在数组中保存一列

Posted

技术标签:

【中文标题】在数组中保存一列【英文标题】:saving a column in an array 【发布时间】:2009-06-12 03:44:06 【问题描述】:

我正在尝试获取随机编号。使用

从数据库中获取条目
SELECT QNO FROM TABLE  ORDER BY RAND() LIMIT 10

它返回一列数据库。

如果我想将所有条目保存在一个数组中,那么我必须使用哪个 php 函数来保存该列。

【问题讨论】:

【参考方案1】:

类似的东西?

$result = mysql_query("SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10");
$rows = array();
while ($row = mysql_fetch_row($result)) 
    $rows[] = $row[0];

更新为不使用第一篇文章和评论中指出的 $i 变量。

【讨论】:

这里实际上不需要计数器 ($i)。如果您只是分配给 $rows[] 它会自动在数组的末尾创建一个新的“插槽”。【参考方案2】:

查看一些示例,了解如何运行查询并获取结果集。

http://www.php.net/mysqli

将结果放入变量后,请执行以下操作:

$myarray = array();
while($row = mysqli_fetch_row($result))
   $myarray[] = $row[0];

【讨论】:

【参考方案3】:

使用 PDO:

$qryStmt = $dbc->query('SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10');
$a = $qryStmt->fetchAll( PDO::FETCH_COLUMN );

【讨论】:

我认为你想要 PDO::FETCH_COLUMN 而不是 PDO::FETCH_ASSOC【参考方案4】:

顺便说一句:如果你只是想随机获得一行,这要快得多,尤其是。对于大表:

select * from table limit 12345,1;

其中 12345 只是一个从行数 count() 计算出来的随机数。

see here,更适用于 rails,但也请查看 cmets。

但要小心:在限制 12345,2 - 第二行不是随机的,而是随机行之后的下一行。并且要小心:当我没记错时(例如 SQLServer) rand() 可以通过 mysql 以外的数据库进行优化,从而导致所有行的随机数相同,这使得结果不是随机的。当您的代码应该与数据库无关时,这一点很重要。

【讨论】:

【参考方案5】:

最后一点:不要将“随机”与“难以预测”混为一谈,这不一样。因此,SQLServer 上的示例排序“选择前 10 名 ... rand() 排序”在运行两次时会产生两个不同的结果集,但是:如果您查看 10 条记录,它们在数据库中彼此靠近,这意味着,它们不是随机的。

【讨论】:

以上是关于在数组中保存一列的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 将 .mat 文件保存为基于一列共有的较小文件

在 Pandas 中基于一列保存数据并由另一列命名

将熊猫数据框保存到csv时如何保留numpy数组

将熊猫数据框保存到csv时如何保留numpy数组

将多个下拉值保存到 SQL 数据库的一列中

如何获得二维数组中每一列和每一行的总和?