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

时间:2011-04-09 17:16:03

标签: php mysql arrays

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

此代码显示来自类型的所有项目,但我想组织结果以仅显示一次项目,然后显示每个类别中的故事数量。

4 个答案:

答案 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) . "'>";