Php 我需要编写两次相同的mySQL查询

Php 我需要编写两次相同的mySQL查询,php,mysql,Php,Mysql,在PHP页面的顶部,我有一个mySQL查询,后面跟着一个do while循环 $query_offer = "SELECT offer, offer_text FROM ad_offers WHERE hid LIKE '$hid' AND show_from < CURRENT_DATE() AND show_to > CURRENT_DATE()"; $offer = mysql_query($query_offer, $MySQL_extranet) or die(mysql_

在PHP页面的顶部,我有一个mySQL查询,后面跟着一个do while循环

$query_offer = "SELECT offer, offer_text FROM ad_offers WHERE hid LIKE '$hid' AND show_from < CURRENT_DATE() AND show_to > CURRENT_DATE()";
$offer = mysql_query($query_offer, $MySQL_extranet) or die(mysql_error());
$row_offer = mysql_fetch_assoc($offer);
do {
SOME PHP STUFF
}while($row_offer = mysql_fetch_assoc($offer));
$query\u offer=“选择offer,offer\u text FROM ad\u offers,其中hid类似于“$hid”和show\u FROMCURRENT\u DATE()”;
$offer=mysql\u query($query\u offer,$mysql\u extranet)或die(mysql\u error());
$row\u offer=mysql\u fetch\u assoc($offer);
做{
一些PHP的东西
}而($row_offer=mysql_fetch_assoc($offer));
然后再往下看,我想用不同的PHP代码重复相同的do-while循环。但它不起作用。似乎系统在第一次执行dowhile之后忘记了查询的结果。如果我在第二个do之前重复原始查询,它就会工作。但这看起来很混乱,而且肯定没有必要在同一页上写两次相同的查询


如有任何建议,将不胜感激。谢谢。

将行分配给数组,然后重新使用该数组

$Offers = array();
while($row_offer = mysql_fetch_assoc($offer)) {
     $Offers[] = $row_offer;
}

然后在$Offers上进一步向下循环代码

在循环数据一次之后,您需要执行以下操作

mysql_data_seek($offer, 0);
更多信息:


注意:从PHP 5.5.0开始,此扩展已被弃用

将结果分配给数组并再次迭代,或者创建可以在需要时调用的函数

<?php
function getOffers($hid) {
    $offers = array();
    $query  = mysql_query('SELECT ...');
    while($offer = mysql_fetch_assoc($query)) {
        array_push($offers, $offer);
    }
    return $offers;
}

$offers = getOffers($hid);

// use $offers here

// or here

// or recall getOffers($hid)

fetch\u assoc将一个内部指针移动到下一行,因此在循环结束后,您位于最后一行,再次运行查询,使“指针”指向开始处。或者您可以使用mysql\u result($offer,$line),您正在覆盖
$row\u offer
,而。。。。。这将覆盖mysql_fetch_assocf,当然在您获取结果后,系统会忘记结果。如果需要再次使用,请将其存储在数组中。并将do/while重新构建为适当的while,因为这就是您使用它的方式。@demonofnight他不需要再次运行查询…只需重置结果
mysql\u data\u seek($offer,0)
更好的方法是在第一次通过后分配给数组。此解决方案在数组的头部插入一个稀疏的NULL。不应该使用
do/while
我真的想知道是谁在教所有这些人使用
do/while
循环来处理所有事情。它的适当用法极其有限,然而,大多数初学者似乎都会抓住它,专门使用它。(关于OP,不是you Patrick)@crush,我之所以使用do/while,是因为它在PHP手册中,并且可以正常工作。为什么你认为我不应该使用它,我应该使用什么来代替它?@梯形图学家,在这种情况下,你不应该使用它,因为它会用NULL填充第一个数组项,正如我修复代码之前NielsKeurentjes提到的那样。do/while是指当你已经有了一个起始值,循环以某种方式操纵该值,然后需要根据你的条件检查它。我不建议调用该函数,这是一个不需要执行的附加查询,除非$hid是与以前不同的值。