0

假设我有一个简单的投票应用程序,每个用户只能从投票中选择一个选项

我的投票表

+-----------+---------------------+ 
| poll_id   | question            | 
+-----------+---------------------+
|         1 | q1?                 |     
+-----------+---------------------+
|         2 | q2?                 |     
+-----------+---------------------+
|         3 | q3?                 |     
+-----------+---------------------+

我的选项表

+-----------+---------------------+---------+---------+ 
| option_id | poll_id             | option  | counter |
+-----------+---------------------+---------+---------+
|         1 | 1                   |   yes   |  254    | 
+-----------+---------------------+---------+---------+
|         2 | 1                   |   no    |392333337| 
+-----------+---------------------+---------+---------+
|         3 | 2                   |   yes   | 1000    | 
+-----------+---------------------+---------+---------+

现在我做这样的事情来显示我一页的所有民意调查

$polls = $db->query("select * from polls ");
foreach ($polls as $poll)
{ 

  echo $poll->question;

  $options = $db->query("select * from options where poll_id = '$poll->id' ");
  foreach($options as $op )
  {
    echo '<checkbox />'.$op->option; 
  }


}

现在,如果我想使用 joine 和一个查询来执行此操作

$query = "select p.* , o.* from polls p JOIN options  o ON p.poll_id = o.poll_id ";

将使用什么数据结构来表示结果?也许是一个多维数组?我不确定如何打印结果

就像在这个例子中结果将是

resul_array (
      poll_id  poll_question  option   option 
        1         q1            ys       no
        2         q2            no  
}

如果我将结果作为数组行得到,那么会有类似名称的列吗?我很困惑

4

1 回答 1

0

在我看来,您只需要在查询中添加“order by”,并将结果存储在一个数组中,然后对其进行处理即可。

就像是:

$polls = $db->query("select p.* , o.* from polls p JOIN options  o ON p.poll_id = o.poll_id order by p.poll_id");
$currentPoll = $polls[0];
foreach ($polls as $poll)
{ 
  if($poll->poll_id != $currentPoll->poll_id) {
     echo $poll->question;
     $currentPoll = $poll;
  }

  echo '<checkbox />'.$poll->option; 

}

HTH。

于 2012-06-28T04:33:42.567 回答