将两个查询中的值匹配到同一个表中

时间:2016-12-18 13:03:47

标签: php html mysql mysqli html-table

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

if op in ["/"]:
    # rounding does not rounds half up so I imported a module
    from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_DOWN
    Decimal(str(answer)).quantize(Decimal("1.11"), rounding=ROUND_HALF_UP)
    Decimal(str(given_answer)).quantize(Decimal("1.11"), rounding=ROUND_HALF_UP)
print("correct {}".format(answer, ".2f"))

它正在为第一个值工作,但只有那一个,列的其余部分为空。

2 个答案:

答案 0 :(得分: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时,内部行指针都会加1。因此,在for for循环的第二个周期中,$result2 -> fetch_array()将重新调整NULL,因为不再有结果。

或者,您可以在第一个循环之前迭代$result2并将结果存储在二维数组中。但是:我更愿意使用JOIN将两个语句组合在一起,这样您才能获得一个结果集。但是提供的信息太少,看看在这种情况下是否可能。

MySQL JOIN Syntax

答案 1 :(得分:0)

哼......循环($ 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),还有另一个逻辑)。