Php 如何将MySQL表记录一分为二显示在页面的每一面
要获取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_
$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时,它将是一个十进制,MySQLLIMIT
不能接受十进制(显然)。有没有更好的方法来做我想做的事
提前谢谢 你可以把它四舍五入,这样你总能得到一个整数。这样,小数点就不会破坏查询
$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攻击的风险。是的,我知道。我现在知道的比一月份知道的多得多。但是选择计数(*)
对我不起作用:(这就是为什么我总是这么做的原因。)