Php 如何将MySQL表记录一分为二显示在页面的每一面

Php 如何将MySQL表记录一分为二显示在页面的每一面,php,mysql,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_

要获取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 />';
}
$result=mysql\u查询(“按名称从文化顺序中选择*ASC限制”。$half);
while($row=mysql\u fetch\u数组($result)){
$url=“artists.php?culture=“.ucfirst($row['name']);
回声'
“.$row['name']”

; }
从这个屏幕截图中可以看出,这非常有效:

但是,如果表中的记录数为奇数,则会出现错误:

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

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


提前谢谢

你可以把它四舍五入,这样你总能得到一个整数。这样,小数点就不会破坏查询

$half = floor($numRows/2);

使用一个新的<代码> $1/<代码>值,使用代码> > CELL()/代码>在另一侧上,这样就不会跳过中间的一行。

另一方面,最好只执行一个查询,返回每一行,然后在一侧将行输出到
$half
,然后从该点继续到另一侧的末尾。然后,只需访问数据库一次,就可以更容易地查看发生了什么

e、 g

$result=mysql\u查询(“从文化中选择*按名称排序ASC”);
$half=floor(mysql\u num\u行($result)/2);
$count=0;
//第一面。

而($count您可以将其四舍五入,以便始终得到一个整数。这样,十进制就不会中断查询

$half = floor($numRows/2);

使用一个新的<代码> $1/<代码>值,使用代码> > CELL()/代码>在另一侧上,这样就不会跳过中间的一行。

另一方面,最好只执行一次查询,返回每一行,然后在一侧将行输出到
$half
,然后在另一侧从该点继续到最后。这样,您只需访问数据库一次,就可以更容易地看到发生了什么

e、 g

$result=mysql\u查询(“从文化中选择*按名称排序ASC”);
$half=floor(mysql\u num\u行($result)/2);
$count=0;
//第一面。

而($count您可以在查询中获取所有结果

$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
        }
    }

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

$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
        }
    }

@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个条目,是否仍要将其拆分为三分之一?

@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个条目,是否有必要将其分成三部分?

哦,那么就制作两个
$一半的变量,一个用于一边,另一个用于另一边?(使用ceil用于另一边?)@Nathan是的,两个
$half
变量一边使用
floor
,另一边使用
ceil
。我已经更新了我的答案,以更简洁的方式完成,只需从数据库中提取所有行,然后显示到其中一边的中间点,然后从该点继续到另一边。我有一个问题…还有办法吗o在每一面显示一半的记录?因为现在每一面都不是偶数,而我为其创建网站的人希望每一面都有偶数个区域性:没关系,在第一个while循环中,我刚刚将运算符更改为
Oh,所以要生成2个
$half
变量,一个用于一面,另一个用于另一面?(另一侧使用ceil?)@Nathan是的,两个
$half
变量一边使用
floor
,另一边使用
ceil
。我已经更新了我的答案,以更简洁的方式完成,只需从数据库中提取所有行,然后显示到其中一边的中间点,然后从该点继续到另一边。我有一个问题…还有办法吗o在每一面显示一半的记录?因为现在每一面都不是偶数,而我为其创建网站的人希望每一面都有偶数的文化:没关系,在第一个while循环中,我只是将操作符更改为
,谢谢你的回答,但它无法与我的设置一起工作,因为我使用的是表(我在做布局时很懒,所以我只使用了表:P)谢谢你的回答,但是我的设置不起作用,因为我在使用表(我在做布局时很懒,所以我只使用了表:P)
SELECT COUNT(*)
是获取行数的更好方法。此外,您需要避免数据进入MySQL查询和数据进入HTML,否则您将面临SQL注入和XSS攻击的风险。是的,我知道。我现在知道的比一月份知道的多得多。但是
选择计数(*)
对我来说永远不起作用:(这就是为什么我总是必须使用
mysql\u num\u rows()
选择计数(*)
是获取行数的更好方法。此外,您需要避免数据进入MySQL查询和数据进入HTML,否则您将面临SQL注入和XSS攻击的风险。是的,我知道。我现在知道的比一月份知道的多得多。但是
选择计数(*)
对我不起作用:(这就是为什么我总是这么做的原因。)