在数组中保存一列
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 条记录,它们在数据库中彼此靠近,这意味着,它们不是随机的。
【讨论】:
以上是关于在数组中保存一列的主要内容,如果未能解决你的问题,请参考以下文章