如何将MySQL表记录分成两半以显示在页面的每一侧

时间:2012-01-26 03:05:48

标签: php mysql

要在这里获取一半的MySQL表记录,我正在使用:

$numRows=mysql_num_rows(mysql_query("SELECT * FROM cultures"));
$half = $numRows/2;

然后在页面的每一边,我将记录数限制为一半,而另一方面,我按DESC订购,而不是另一半:

$result = mysql_query("SELECT * FROM cultures ORDER BY name ASC LIMIT ".$half);
while($row = mysql_fetch_array($result)) {
$url = "artists.php?culture=".ucfirst($row['name']);
echo '<div class="homepage_culture_item">
<a href="'.$url.'"></a>
<img src="/images/flags/'.$row['name'].'.png" style="width: 30px; vertical-align: middle; margin-right: 10px;" />'.$row['name'].'
</div>
<br />';
}

正如您在此屏幕截图中看到的那样,效果很好:

enter image description here

但是,如果表中有奇数个记录,我会收到错误:

enter image description here

  

警告:mysql_fetch_array()期望参数1是资源,   在C:\ wamp \ www \ index.php中给出的布尔 50

如果记录的数量是偶数,但是如果添加了另一个,而不是仅仅将其放在一边,它会很好用,因为它可能会返回一个错误,因为当你将15除以2时,它将是一个十进制和MySQL LIMIT不能接受小数(显然)。有没有更好的方法来做我想做的事情?

提前致谢!

3 个答案:

答案 0 :(得分:3)

你可以将它向下舍入,这样你总能得到一个整数。这样,十进制不会破坏查询。

$half = floor($numRows/2);

您希望在另一侧使用$half使用新的ceil()值进行向上舍入,因此不要在中间跳过一行。

顺便说一句,最好只返回一行返回每一行,然后在一侧将行输出到$half,然后从那一点继续到另一端的结尾。然后你只需要访问数据库一次,就可以更容易地看到发生了什么。

e.g

$result = mysql_query("SELECT * FROM cultures ORDER BY name ASC");
$half   = floor(mysql_num_rows($result)/2);
$count  = 0;

// First side.
while($count <= $half
      && $row = mysql_fetch_array($result))
{
    // ...
    $count++;
}

// ...

// Second side.
while($row = mysql_fetch_array($result))
{
    // ...
}

答案 1 :(得分:1)

您可以在查询中获取所有结果

$result = mysql_query("SELECT * FROM cultures ORDER BY name ASC");

然后做:

$i = 0;
while($row = mysql_fetch_array($result)){
    $i++
    if($i % 2){
        //echo right aligned div
        }
    else{
        //echo left aligned div
        }
    }

答案 2 :(得分:1)

@Rich Adams我做了你做过的事情

<center>
<TABLE BORDER="1" WIDTH="500">
  <TR>
   <TD WIDTH="250">
    <TABLE BORDER="1" WIDTH="250">
     <TR>
      <TD WIDTH="250">
       <?php
       require_once '../../connect.php';
       mysql_select_db("DELETED!!!", $con);
       $result = mysql_query("SELECT * FROM DELETED!!! ORDER BY name ASC");
       $half   = floor(mysql_num_rows($result)/2);
       $count  = 0;
       $url = $row['page'];

       while($count <= $half
                && $row = mysql_fetch_array($result))
       {
            echo "<tr>";
            echo "<td><a href=".$row['page'].">".$row['name']."</a></td>";
            echo "</tr>";
            $count++;
       }
       ?>
      </TD>
     </TR>
    </TABLE>
   </TD>
   <TD WIDTH="250">
    <TABLE BORDER="1" WIDTH="250">
     <TR>
      <TD WIDTH="250">
       <?php
       while($row = mysql_fetch_array($result))
       {
            echo "<tr>";
            echo "<td><a href=".$row['page'].">".$row['name']."</a></td>";
            echo "</tr>";
       }
       mysql_close($con);
       ?>
      </TD>
     </TR>
    </TABLE>
   </TD>
  </TR>
</TABLE>
</center>

但它不会将列表分成两半并单独显示它们。

编辑:将我的代码更新为我拥有的内容,此表有93个条目,无论如何将它分成三分之一?