Php 如何在mysql数组中只显示每种类型的一个结果
我有一个php数组来显示数据库中的信息。我希望能够显示像这样的项目例如空间探索(3)表示在数据库中找到的次数。现在,它正在提取信息并列出结果,其次数与数据库中显示的次数相同,例如链接到各个故事的《太空探索》。这是我的密码:Php 如何在mysql数组中只显示每种类型的一个结果,php,mysql,arrays,Php,Mysql,Arrays,我有一个php数组来显示数据库中的信息。我希望能够显示像这样的项目例如空间探索(3)表示在数据库中找到的次数。现在,它正在提取信息并列出结果,其次数与数据库中显示的次数相同,例如链接到各个故事的《太空探索》。这是我的密码: <?php $type = $_POST['Type']; $result = mysqli_query($cxn, "SELECT * FROM Stories
<?php
$type = $_POST['Type'];
$result = mysqli_query($cxn, "SELECT *
FROM Stories
WHERE Type = '$type'");
if($result < 0) {
echo "<center><b>No stories are posted for this category yet.</b></center>";
} else {
while($row = mysqli_fetch_array($result)) {
$title = $row['Title'];
$result2 = mysqli_num_rows($result);
echo "<FORM ACTION ='browse.php' METHOD ='POST'>
<INPUT TYPE = 'Submit' name='cool2' id='cool2' VALUE = '$title'>";
echo " <font color = '#0000ff''>(" . $result2 . ")";
echo "</form>";
echo " ";
}
} ?>
问题在于您正在使用
while($row = mysqli_fetch_array($result))
这将迭代结果中的所有行。相反,如果你只想要第一个,那就做吧
$row = mysqli_num_rows($result);
$occurrences = mysqli_num_rows($result);
// ...
如果我理解正确的话,你想要的是一个分组函数。例如:
select id, title, count( * ) from stories where type = 'ANYTHING' group by id, title
是这样吗?您应该运行以下查询
"SELECT Title,count(*) as cnt FROM Stories WHERE Type = '$type' group by Title"
然后,您将只获得不同的标题,cnt列将包含它出现的次数。这不是您问题的答案,但无论如何,它都是有用的信息:
您的SQL查询不受攻击。这是因为您直接将用户输入(POST参数)插入到SQL查询字符串中。对于字符串值,应使用字符串转义函数,以确保将字符串安全插入查询:
$query = "SELECT * FROM Stories WHERE Type = '" . mysqli_real_escape_string($type) . "'";
转义输出到HTML代码中的任何值也是一个好主意。这有助于防止攻击。使用该功能可执行以下操作:
echo "<INPUT TYPE = 'Submit' name='cool2' id='cool2' VALUE = '" . htmlspecialchars($title) . "'>";
echo”“;
在大多数模式中,您可能不希望ID像这样出现在其中。