Php 如何在mysql数组中只显示每种类型的一个结果

Php 如何在mysql数组中只显示每种类型的一个结果,php,mysql,arrays,Php,Mysql,Arrays,我有一个php数组来显示数据库中的信息。我希望能够显示像这样的项目例如空间探索(3)表示在数据库中找到的次数。现在,它正在提取信息并列出结果,其次数与数据库中显示的次数相同,例如链接到各个故事的《太空探索》。这是我的密码: <?php $type = $_POST['Type']; $result = mysqli_query($cxn, "SELECT * FROM Stories

我有一个php数组来显示数据库中的信息。我希望能够显示像这样的项目例如空间探索(3)表示在数据库中找到的次数。现在,它正在提取信息并列出结果,其次数与数据库中显示的次数相同,例如链接到各个故事的《太空探索》。这是我的密码:

<?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 "&nbsp;&nbsp;<font color = '#0000ff''>(" . $result2 . ")";
    echo "</form>";
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
  }
} ?>

问题在于您正在使用

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像这样出现在其中。