我正在制作一个侧栏栏,它会显示提交到我数据库中的10个最新内容。我对这一切都很陌生,所以我想知道......这是一个好办法吗?它工作..不是自动的,但当我向我的数据库提交一些东西时,它去那里..我提交别的东西然后顶部转到第二个..!我只是不能动摇这种感觉,也许这不是一个好方法。
前3个部分
<div class="span3 offset3">
<?php include 'feed/one.php'; ?>
<ul class="nav nav-list well">
<li class="nav-header"></li>
<li class="active"><a href="#">HIT INFO</a></li>
<?php while($row = $data->fetch_assoc()) { ?>
<li><a href="<?php print $row['link']?>"><?php
Print "<tr>";
Print "<th>Hit:</th> <td>".$row['hit'] . "</td> ";
Print "<th>Amount:</th> <td>".$row['amount'] . " </td>";
Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
Print "<br><br/>";
Print "</table>";?></a></li>
<?php } ?>
<li class="divider"></li>
<?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 1, 1"); ?>
<?php while($row = $data->fetch_assoc()) { ?>
<li><a href="<?php print $row['link']?>"><?php
Print "<tr>";
Print "<th>Hit:</th> <td>".$row['hit'] . "</td> ";
Print "<th>Amount:</th> <td>".$row['amount'] . " </td>";
Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
Print "<br><br/>";
Print "</table>";?></a></li>
<?php } ?>
<li class="divider"></li>
<?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 2, 1"); ?>
<?php while($row = $data->fetch_assoc()) { ?>
<li><a href="<?php print $row['link']?>"><?php
Print "<tr>";
Print "<th>Hit:</th> <td>".$row['hit'] . "</td> ";
Print "<th>Amount:</th> <td>".$row['amount'] . " </td>";
Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
Print "<br><br/>";
Print "</table>";?></a></li>
<?php } ?>
<li class="divider"></li>
<?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 3, 1"); ?>
<?php while($row = $data->fetch_assoc()) { ?>
<li><a href="<?php print $row['link']?>"><?php
Print "<tr>";
Print "<th>Hit:</th> <td>".$row['hit'] . "</td> ";
Print "<th>Amount:</th> <td>".$row['amount'] . " </td>";
Print "<th>Category:</th> <td>".$row['category'] . "</td></tr> ";
Print "<br><br/>";
Print "</table>"; ?></a></li>
<?php } ?>
提交的数据会显示在我的主页上,直到其他内容被提交,转到“Feed”,并转到另一个显示过去数据的页面。
答案 0 :(得分:1)
而不是每次查询数据库并获取记录以显示它时,您应该在一个查询中执行此操作,该查询将获取您需要的行数:
<?php $data = $mysqli->query("SELECT * FROM hit ORDER BY hit_id DESC LIMIT 1, N"); ?>
这将获取前N行,其中N当然必须是数字。然后你应该循环抛出行并按照你现在的方式打印它。唯一的区别是,你可能需要一段时间才能正确地获得打开/循环/关闭表格的细微差别,但这是一个非常好的投入你的时间来包围它!
答案 1 :(得分:1)
您似乎没有任何用户可以拦截的内容,因此“安全”不是问题。
但是你在查询不合逻辑。当您可以最初获取数据并使用该对象在需要时中继内容时,没有理由在整个页面上重复具有多个偏移的相同查询。在文件的开头运行这样的查询,或理想情况下在渲染任何输出之前运行。
"SELECT * FROM hit ORDER BY hit_id DESC LIMIT 4"
现在您有4个项目,因此访问整个页面中的内容可能是这样的:
<ul class="nav nav-list well">
<li class="nav-header"></li>
<li class="active"><a href="#">HIT INFO</a></li>
<?php while($row = $data->fetch_assoc()): ?>
<li>
<a href="<?php print $row['link']?>">
<table>
<tr>
<th>Hit:</th> <td><?php echo $row['hit']; ?></td>
<th>Amount:</th> <td><?php echo $row['amount']; ?></td>
<th>Category:</th> <td><?php echo $row['category']; ?></td>
</tr>
<br><br/>
</table>
</a>
</li>
<li class="divider"></li>
<?php endwhile; ?>
</ul>
现在,你有一些标记错误。你关闭一个你永远不会打开的桌子。这只能以一种小的方式被视为表格数据,因此无论如何,表格可能不是最好的方法。我自己并不明白你以这种方式使用th和td,但如果它对你有用那么好。
你应该突破php来显示html。回声像"<th>"
之类的东西是完全没必要的。
答案 2 :(得分:0)
您实际上是使用hit_id
字段来对从数据库中获取的数据进行排序。
如果您想要实际检索“提交到我的数据库中的10个最新内容”,则除了自动增加的ID之外,您还需要其他内容。 (类似于COUNT
行上的amount
)。它将取决于填充此字段的实际值/方式,但它可能看起来像这样:
SELECT * FROM hit GROUP BY Category ORDER BY amount DESC;
关于这一部分:
但是当我向我的数据库提交一些东西时,它会去那里..我 提交其他内容然后顶部转到第二个
原因很简单,你正在使用ORDER BY hit_id DESC
,这就是为什么最后插入的ID首先出现的原因。