【问题标题】:Getting mysqli_fetch_array data without 'moving' to next row获取 mysqli_fetch_array 数据而不“移动”到下一行
【发布时间】:2013-12-05 19:00:20
【问题描述】:

我有一个复杂的 sql 查询的结果。结果是这样的:

player_id   mail_text   mail_title
1           hello       talking
2           hi          talking
1           how are u?  talking
2           fine!       talking 

现在,我想使用$row=mysqli_fetch_array($result) 扫描所有结果并在表格行中显示结果,但在循环之前我想输出mail_title。

我不想使用mysqli_fetch_array($result) 来显示标题,因为这样循环将从第二行开始,而不是从第一行开始。

另外我不想做双重查询,因为查询太大了。

还有其他方法可以做到这一点吗?

【问题讨论】:

  • 你必须学会​​使用模板。

标签: php sql mysqli row


【解决方案1】:

您可以:

a) 将整个结果集吸入客户端缓冲区,例如

$data = array();
while($row = mysqli_fetch_assoc($result)) {
   $data[] = $row;
}

然后从该数组中提取您的标题。

b) seek 回到结果集的开头,使用mysqli::data_seek()。然而,并非所有结果集都是可搜索的。

【讨论】:

  • Second 根本不是一个选项,尤其是,因为在从表中获取数据时,您永远不应该不做任何输出。
  • 是的,我考虑过在查询后使用 javascript 来更新标题,但我感觉不对。还有其他选择吗?
  • 在你的 fetch 循环中加入一些逻辑 if (on_first_row()) { output title }
  • @YourCommonSense:告诉我法律规定您在获取时不能不输出的地方......
  • 我喜欢 on_first_row() 的东西。那个功能存在吗?如果没有,我如何制作第一行条件?
【解决方案2】:

做一个简单的计数。如果您在第一行,则获取/输出您的标题。

$data = array();
$i = 1;
while($row = mysqli_fetch_assoc($result)) {
    if ( $i == 1 ) {
        // do stuff
    }
    $data[] = $row;
    $i++;
}

【讨论】:

  • 这里的计数是多余的。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多