我有一个php数组来显示数据库中的信息。我希望能够显示像 ex这样的项目。 Space Quest(3)'(3)'表示在数据库中找到的次数。现在它正在拉动信息并将结果列出数据库中显示的次数,如 ex。 Space Quest Space Quest Space Quest 链接到各个故事。这是我的代码:
<?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 " ";
}
} ?>
此代码显示来自类型的所有项目,但我想组织结果以仅显示一次项目,然后显示每个类别中的故事数量。
答案 0 :(得分:3)
您应该运行以下查询
"SELECT Title,count(*) as cnt FROM Stories WHERE Type = '$type' group by Title"
然后你只会获得不同的标题,而cnt列将包含它发生的次数。
答案 1 :(得分:0)
问题是你正在使用
while($row = mysqli_fetch_array($result))
这将迭代结果中的所有行。相反,如果您只想要第一个,请执行
$row = mysqli_num_rows($result);
$occurrences = mysqli_num_rows($result);
// ...
答案 2 :(得分:0)
好吧,如果我理解正确,你想要的是一个分组功能。例如:
select id, title, count( * ) from stories where type = 'ANYTHING' group by id, title
就是这样?
答案 3 :(得分:0)
这不是你问题的答案,但无论如何都要了解它是有用的信息:
您的SQL查询可归于SQL Injection次攻击。这是因为您直接将用户输入(POST参数)插入到SQL查询字符串中。对于字符串值,您应该使用字符串转义函数,以确保将字符串安全地插入到查询中:
$query = "SELECT * FROM Stories WHERE Type = '" . mysqli_real_escape_string($type) . "'";
将所有输出的值转义为HTML代码也是一个好主意。这有助于防止Cross-Site Scripting攻击。使用htmlspecialchars()
功能执行此操作:
echo "<INPUT TYPE = 'Submit' name='cool2' id='cool2' VALUE = '" . htmlspecialchars($title) . "'>";