【问题标题】:Store MySQL query result into a two-dimensional array将 MySQL 查询结果存储到二维数组中
【发布时间】:2014-05-18 08:15:59
【问题描述】:

我没有看到类似的问题,所以我要问一个新问题。我也在尝试使用循环和数组,所以如果这是一个非常愚蠢的问题或非常糟糕的代码,我深表歉意。我能够用大约 50 多行代码实现我想要的结果,但它更加不优雅(我基本上将每个查询都放在一个硬编码的行中,而不是使用变量)。因此,我正在尝试学习如何更简洁地对其进行编码以提高效率。不过我可能走错了路……

我有一个具有以下基本结构的表:

[id / username / email / content / side / category / rating]

Side 可以是“yes”或“no”,Category 可以是“red”、“blue”或“green”。这些在提交表单中受到限制。

我正在尝试在循环中执行以下查询,以提取所有需要的数据并将它们存储到 php 中的二维变量中:

$dialecticSides = array("yes","no");
$numberSides = 2;
$dialecticRow = array("red","blue","green");
$numberRows = 3;

$dialectic_queryString = $dialectic_mysqlQuery = $dialectic_sqlResult = $dialectic_totalRows = array();

for($x=0;$x<$numberSides;$x++) {
    for ($y=0;$y<$numberRows;$y++) {        
        $dialectic_queryString[$x][$y] = "SELECT * FROM ". $dialectic_sqlTable ." WHERE side = '" . $dialecticSides[$x]. "' AND category = '". $dialecticRow[$y]."' ORDER BY rating DESC";
        $dialectic_mysqlQuery[$x][$y] = mysql_query($dialectic_queryString[$x][$y], $commenting_conn) or die(mysql_error());
        $dialectic_sqlResult[$x][$y] = mysql_fetch_assoc($dialectic_mysqlQuery[$x][$y]);
        $dialectic_totalRows[$x][$y] = mysql_num_rows($dialectic_sqlResult[$x][$y]);

        var_dump($dialectic_sqlResult);
    }
}

我想要的输出是这样的:

Array
(
    [0] => Array
        (
          [0] => Array
             (
               all the comments which are in row 0 (yes) and side 0 (red)
             )
          [1] => Array
             (
               all the comments which are in row 0 (yes) and side 1 (blue)
             )
          [2] => Array
             (
               all the comments which are in row 0 (yes) and side 2 (green)
             )
        )
    [1] => Array
        (
          [0] => Array
             (
                all the comments which are in row 1 (no) and side 0 (red)
             )
          [1] => Array
             (
               all comments which are in row 1 (no) and side 1 (blue)
             )
          [2] => Array
             (
               all the comments which are in row 1 (no) and side 2 (green)
             )
        )
)

基本上,如果我想知道我正在做的事情是否有意义,或者我是否应该放弃并返回将查询硬编码为不同的结果变量。

我的查询失败 - 查询的输出为空。我究竟做错了什么?提前致谢!

==== 解决了====

for($x=0;$x<$numberSides;$x++) {
for ($y=0;$y<$numberRows;$y++) {        
    $queryString[$x][$y] = "SELECT * FROM comments WHERE topic_id = '{$topicid}' AND side = '{$x}' AND row = '{$y}'";
    $result[$x][$y] = mysqli_query($db_connection,$queryString[$x][$y]) or die(mysqli_error($db_connection));
    while($eachcomment = mysqli_fetch_assoc($result[$x][$y])) {
        $array[$x][$y][] = $eachcomment;
    }
}

【问题讨论】:

  • 您在$dialectic_sqlResult(这是一个数组)上调用mysql_num_rows()。您应该改为在 $dialectic_mysqlQuery(这是一个结果资源)上调用它。
  • 谢谢@msound。我尝试按照建议将$dialectic_sqlResult 替换为$dialectic_mysqlQuery,但收到了类似的错误:“mysql_num_rows() 期望参数1 是资源,在lineXXX 中给出null”。现在唯一的区别是它不是返回 FALSE,而是返回 NULL。这是因为我将结果调用为二维数组的方式吗?
  • 既然你有结果数组,为什么不直接使用count($dialectic_sqlResult[$x][$y])找到totalRows
  • 您说“mysql_num_rows() 期望参数 1 是资源,在 lineXXX 中给出 null”。这意味着您的查询执行 mysql_query() 失败。在调用 mysql_query() 之前,打印查询并在此处分享。
  • 你的表有id、用户名等。“所有cmets的数组”里面是什么?

标签: php mysql sql arrays


【解决方案1】:

您不想将查询等放入数组中。
您只需要一个查询。
定义您的 2 个数组以获取输出行和列:

$rowarray = array("yes" => 0, "no" => 1); // 2 rows?
$colarray = array("red" => 0, "blue" => 1, "green" => 2); // 3 cols?

初始化你的输出数组:

$outputarray = array(array('', '', ''), array('', '', ''));

从您的查询中获取 $result。

SELECT * FROM table

(没有 WHERE 子句)
然后处理结果:

while (($qrow = mysql_fetch_assoc($result))<>NULL) {

$qrow 是一个关联数组:'side' => 'yes'、'category' => 'red' 等。
对于每个 qrow,获取输出行和列:

$row = $rowarray[$qrow['side']];
$col = $colarray[$qrow['category']]

此时你可以将你想要的东西累加到$outputarray中:

$outputarray[$row][$col] .= $qrow['comments']; 

这是“while”循环的结束:

}

【讨论】:

  • 非常感谢@dcromley!这对我有用。如果我想将表中的其他字段添加到我的 $outputarray 中,我应该怎么做?我想做的是$outputarray[$row][$col] .= $qrow['username','email','comments'];,但我知道这是不正确的。我试过这个:$outputarray[$row][$col] .= array($qrow['username'],$qrow['email'], $qrow['comments']); 但它失败了:Array ( [0] =&gt; Array ( [0] =&gt; Array 我检查了link,但找不到引用关联数组中多个字段的方法。
  • @GK79 我想这只是.= $qrow['username'] . $qrow['email'] . $qrow['comments']; 但我不在家。 (请接受答案)。谢谢,@msound
  • 不幸的是,我认为这只是创建了一个连接所有字段的超长字符串,并且不可能随后分别调用每个字段......
  • @GK79 也许这样:(三维数组)$outputarray[$row][$col] = array('username' =&gt; $qrow['username'], 'email' =&gt; $qrow['email'] etc. 然后$onefield = $outputarray[1][2]['email'] ?
  • 我将如何初始化具有 9 个字段的 3D 数组的 $outputarray?
猜你喜欢
  • 2016-10-29
  • 2012-11-05
  • 2021-05-29
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多