【问题标题】:How to show only one result from each type in a mysql array php如何在mysql数组php中只显示每种类型的一个结果
【发布时间】:2011-04-09 17:16:02
【问题描述】:

我有一个 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;";
  }
} ?>

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

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

    您应该改为运行以下查询

    "SELECT Title,count(*) as cnt FROM Stories WHERE Type = '$type' group by Title"
    

    那么你只会得到不同的标题,而 cnt 列将包含它出现的次数。

    【讨论】:

      【解决方案2】:

      问题是你正在使用

      while($row = mysqli_fetch_array($result))
      

      这将遍历结果中的所有行。相反,如果您只想要第一个,请执行

      $row = mysqli_num_rows($result); 
      $occurrences = mysqli_num_rows($result);
      // ...
      

      【讨论】:

        【解决方案3】:

        好吧,如果我理解正确的话,你想要的是一个分组函数。例如:

        select id, title, count( * ) from stories where type = 'ANYTHING' group by id, title
        

        是吗?

        【讨论】:

        • 在大多数架构中,您可能不希望这样的 ID 存在。
        【解决方案4】:

        这不是对您问题的回答,但无论如何它都是有用的信息:

        您的 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) . "'>";
        

        【讨论】:

          猜你喜欢
          • 2012-06-27
          • 2017-03-09
          • 1970-01-01
          • 2015-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多