Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环一个记录集(PHP+MySQL),将列表项中的每2条记录分组_Php_Mysql_Loops - Fatal编程技术网

循环一个记录集(PHP+MySQL),将列表项中的每2条记录分组

循环一个记录集(PHP+MySQL),将列表项中的每2条记录分组,php,mysql,loops,Php,Mysql,Loops,我需要遍历一个记录集PHP+MySQL,将列表项中的每两条记录分组 我的实际代码是: <?php // how many total records do I have? mysql_select_db($database_connEIB, $connEIB); $query_rsMediaCount = "SELECT COUNT(*) AS med_count FROM media"; $rsMediaCount = mysql_query($query_rsMediaCount, $

我需要遍历一个记录集PHP+MySQL,将列表项中的每两条记录分组

我的实际代码是:

<?php
// how many total records do I have?
mysql_select_db($database_connEIB, $connEIB);
$query_rsMediaCount = "SELECT COUNT(*) AS med_count FROM media";
$rsMediaCount = mysql_query($query_rsMediaCount, $connEIB) or die(mysql_error());
$row_rsMediaCount = mysql_fetch_assoc($rsMediaCount);

$mCount = $row_rsMediaCount['med_count']; // total records
$mPages = ceil($mCount / 2); // max LIs to create
$mIndex = 0; // useful initialization for LIMIT, see below

if ($mCount > 0) { // let's show markup only if there's some record!
?>
    <ul>
    <?php for ($mPage = 1; $mPage <= $mPages; $mPage++) { // create the LIs ?>
        <li>
        <?php
        $query_rsMedia = "SELECT med_id FROM media LIMIT $mIndex, 2";
        $rsMedia = mysql_query($query_rsMedia, $connEIB) or die(mysql_error());
        $row_rsMedia = mysql_fetch_assoc($rsMedia);
        do { ?>
            <div><?php echo $row_rsMedia['med_id']; ?></div>
        <?php } while ($row_rsMedia = mysql_fetch_assoc($rsMedia));
        $mIndex += 2; // increment the LIMIT by 2 steps ?>
        </li>
    <?php } ?>
    </ul>
<?php } ?>
输出的排序如下:

<ul>
    <li>
        <div>1</div>
        <div>2</div>
    </li>
    <li>
        <div>3</div>
        <div>4</div>
    </li>
    <li>
        <div>5</div>
    </li>
</ul>
$iteration=0;
echo '<li><ul>';
while ($row_rsMedia = mysql_fetch_assoc($rsMedia)
{
    echo '<div>'.$row_rsMedia['med_id'].'</div>';
    $iteration++;
    if ($iteration%2==0 && $iteration<$mCount)
        echo '</ul><ul>'
}
echo '</ul><li>';
<ul>
    <?php generateList(); ?>
</ul>


<?php
function getPageCount() {
    mysql_select_db($database_connEIB, $connEIB);
    $query_rsMediaCount = "SELECT COUNT(*) AS med_count FROM media";
    $rsMediaCount = mysql_query($query_rsMediaCount, $connEIB) or die(mysql_error());
    $row_rsMediaCount = mysql_fetch_assoc($rsMediaCount);

    $mCount = $row_rsMediaCount['med_count']; 
    $mPages = ceil($mCount / 2); 
}

function generateList() 
    $mIndex = 0; 
    $mPages = getPageCount();

    if ($mCount > 0) {
        for ($mPage = 1; $mPage <= $mPages; $mPage++) { 
            $result = "<li>" ;
            $query_rsMedia = "SELECT med_id FROM media LIMIT $mIndex, 2";
            $rsMedia = mysql_query($query_rsMedia, $connEIB) or die(mysql_error());
            $row_rsMedia = mysql_fetch_assoc($rsMedia);
            while ((row_rsMedia = mysql_fetch_assoc($rsMedia)) != null) {
                $result .= "<div>".$row_rsMedia['med_id']."</div>";
            }
            $mIndex += 2;
            $result .= "</li>
        }

        echo $result;
    }
?>
一切正常,但有没有更优雅或有效的解决方案?
提前感谢

在没有限制声明的情况下询问一次。然后像这样做:

<ul>
    <li>
        <div>1</div>
        <div>2</div>
    </li>
    <li>
        <div>3</div>
        <div>4</div>
    </li>
    <li>
        <div>5</div>
    </li>
</ul>
$iteration=0;
echo '<li><ul>';
while ($row_rsMedia = mysql_fetch_assoc($rsMedia)
{
    echo '<div>'.$row_rsMedia['med_id'].'</div>';
    $iteration++;
    if ($iteration%2==0 && $iteration<$mCount)
        echo '</ul><ul>'
}
echo '</ul><li>';
<ul>
    <?php generateList(); ?>
</ul>


<?php
function getPageCount() {
    mysql_select_db($database_connEIB, $connEIB);
    $query_rsMediaCount = "SELECT COUNT(*) AS med_count FROM media";
    $rsMediaCount = mysql_query($query_rsMediaCount, $connEIB) or die(mysql_error());
    $row_rsMediaCount = mysql_fetch_assoc($rsMediaCount);

    $mCount = $row_rsMediaCount['med_count']; 
    $mPages = ceil($mCount / 2); 
}

function generateList() 
    $mIndex = 0; 
    $mPages = getPageCount();

    if ($mCount > 0) {
        for ($mPage = 1; $mPage <= $mPages; $mPage++) { 
            $result = "<li>" ;
            $query_rsMedia = "SELECT med_id FROM media LIMIT $mIndex, 2";
            $rsMedia = mysql_query($query_rsMedia, $connEIB) or die(mysql_error());
            $row_rsMedia = mysql_fetch_assoc($rsMedia);
            while ((row_rsMedia = mysql_fetch_assoc($rsMedia)) != null) {
                $result .= "<div>".$row_rsMedia['med_id']."</div>";
            }
            $mIndex += 2;
            $result .= "</li>
        }

        echo $result;
    }
?>

首先,为了便于阅读,我将HTML和PHP分开。另外,我不完全相信do…while循环,它实际上打印结果,如果表是空的呢

您的代码还包含两个不同的想法:生成列表和获取页面计数,因此我将它们分成两个单独的函数。使代码更易于阅读

因此,它可能是这样的:

<ul>
    <li>
        <div>1</div>
        <div>2</div>
    </li>
    <li>
        <div>3</div>
        <div>4</div>
    </li>
    <li>
        <div>5</div>
    </li>
</ul>
$iteration=0;
echo '<li><ul>';
while ($row_rsMedia = mysql_fetch_assoc($rsMedia)
{
    echo '<div>'.$row_rsMedia['med_id'].'</div>';
    $iteration++;
    if ($iteration%2==0 && $iteration<$mCount)
        echo '</ul><ul>'
}
echo '</ul><li>';
<ul>
    <?php generateList(); ?>
</ul>


<?php
function getPageCount() {
    mysql_select_db($database_connEIB, $connEIB);
    $query_rsMediaCount = "SELECT COUNT(*) AS med_count FROM media";
    $rsMediaCount = mysql_query($query_rsMediaCount, $connEIB) or die(mysql_error());
    $row_rsMediaCount = mysql_fetch_assoc($rsMediaCount);

    $mCount = $row_rsMediaCount['med_count']; 
    $mPages = ceil($mCount / 2); 
}

function generateList() 
    $mIndex = 0; 
    $mPages = getPageCount();

    if ($mCount > 0) {
        for ($mPage = 1; $mPage <= $mPages; $mPage++) { 
            $result = "<li>" ;
            $query_rsMedia = "SELECT med_id FROM media LIMIT $mIndex, 2";
            $rsMedia = mysql_query($query_rsMedia, $connEIB) or die(mysql_error());
            $row_rsMedia = mysql_fetch_assoc($rsMedia);
            while ((row_rsMedia = mysql_fetch_assoc($rsMedia)) != null) {
                $result .= "<div>".$row_rsMedia['med_id']."</div>";
            }
            $mIndex += 2;
            $result .= "</li>
        }

        echo $result;
    }
?>

希望有帮助。

只进行一次查询,并将结果分组到循环中。使用模运算符%:


只是写的,不是testet

我会尝试运行更少的查询

$query_rsMedia = "SELECT med_id FROM media";
$rsMedia = mysql_query($query_rsMedia, $connEIB) or die(mysql_error());
$count = 0;

echo '<ul>';

while($row = mysql_fetch_assoc($rsMedia))
{
   //check divisibility to know when to show li
   if ($count % 2 == 0) {
      echo '<li>';          
   } 

   echo '<div>' . $row['med_id'] . '</div>';
   $count++;

   if ($count % 2 == 0) {
      echo '</li>';          
   }
}
if ($count % 2 == 1) echo '</li>';
echo '</ul>';