【问题标题】:Matching values from two queries into the same table将两个查询中的值匹配到同一个表中
【发布时间】:2017-05-03 16:17:33
【问题描述】:

我正在尝试为 PHP 上的编码值添加描述。代码是从一个表中提取的,而描述是从另一个表中提取的。我们的想法是,它们被呈现在一个表上,每个代码都有正确的描述,但是当我尝试添加原始有序查询时,描述错位了,所以我尝试了这个:

 <table>
 for($i=0; $i < $items; $i++)
 {
     $row = $results -> fetch_array();
     echo '<tr>';
     echo '<td>'.$row['code'].'</td>';
     for($j=0; $j<$items2; $j++) 
     {
         $row2 = $result2 -> fetch_array();
         if ($row['code'] == $row2['code']) 
         {
             echo '<td>'.$row2['description'].'</td>';
         }
     }
     echo '</tr>';
 }
 echo '</table>';

它适用于第一个值,但只有那个值,该列的其余部分为空。

【问题讨论】:

  • 旁注:&lt;items2 除非它是一个常数,否则它应该读作&lt;$items2。 Stack 的语法高亮显示有一个错误,以及 &lt;table&gt; for($i=0; $i &lt; $items; $i++) 没有打开/关闭 php 标签。

标签: php html mysql mysqli html-table


【解决方案1】:

我认为您的问题是,您必须重置 $result2 的行指针。

 <table>
 for($i=0; $i < $items; $i++)
 {
     $row = $results -> fetch_array();
     echo '<tr>';
     echo '<td>'.$row['code'].'</td>';
     for($j=0; $j<items2; $j++) 
     {
         $result2 -> data_seek( 0 );
         $row2 = $result2 -> fetch_array();
         if ($row['code'] == $row2['code']) 
         {
             echo '<td>'.$row2['code'].'</td>';
         }
     }
     echo '</tr>';
 }
 echo '</table>';

每次调用fetch_array,内部行指针都会加一。所以在外部 for 循环的第二个循环中,$result2 -&gt; fetch_array() 将返回 NULL,因为没有更多结果了。

或者,您可以在第一个循环之前遍历$result2 并将结果存储在二维数组中。但是:我更愿意使用JOIN 将两个语句放在一起,这样您只会得到一个结果集。但是提供的信息太少,无法确定在这种情况下是否可行。

MySQL JOIN Syntax

【讨论】:

  • 在第二个循环中添加 data_seek(0) 会产生一些奇怪的结果,但是当我在第一个循环中尝试它时,它工作得很好。
【解决方案2】:

嗯...循环 ($j) 和 row2 之间的链接是什么? $j 没有被使用?不应该是您查询的参数吗?

我认为你需要的是这样的:

<?php
$data1 = $results->fetch_array();
$data2 = $results2->fetch_array();

foreach( $data1 as $row ) {
  echo '<tr>';
  echo '<td>', $row['code'], '</td>';
  foreach( $data2 as $row2 ) {
    echo '<td>';
    if( $row['code'] == $row2['code'] ) {
      echo 'match';
    }
    else {
      echo 'no match';
    }
    echo '</td>';
  }
  echo '</tr>';
}

我没有添加 for 因为我不明白你想要什么。 对于你的fetch_array,你只能调用一次(如果你改变一个参数,即:somefield=$j,还有另外一个逻辑)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2015-04-16
    • 2021-09-13
    • 2020-09-15
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多