【问题标题】:Output row with no duplicates没有重复的输出行
【发布时间】:2012-11-26 23:01:06
【问题描述】:

我正在尝试输出最新的行,但不显示任何重复项。我的表有一个唯一的 id (note_id) 和 issue_id,可以分配给多个 (note_ids);这样,每个条目都是唯一的,但可以与一个常见问题相关联。

这是我的代码:

$issueSelect = "SELECT DISTINCT issue_id FROM notes WHERE assigned = '$loginID' ORDER BY note_id ASC";
    $issueQuery = mysql_query($issueSelect);

然后我在while循环中有一个输出语句:

while ($issueResult = mysql_fetch_assoc($issueQuery)){
$issueID = $issueResult['issue_id'];
$issue = $issueResult['issue'];
      if ($issue == "open" or $issue == "assigned"){
                echo"<td align='right'><a href=\"note_details.php?note_click=$issueID\">$issueID</td>";

}

但由于某种原因,我什么也没得到...当我只输入 SELECT * 时,它会显示一些东西,但它包含重复项(我不想要)。

我缺少什么可能是为什么这不起作用?

【问题讨论】:

  • 您在查询中的哪个位置选择“问题”字段? (提示:你不是,这就是为什么没有显示任何内容,因为循环中的条件总是失败)
  • @Crontab 我应该在哪里选择问题?应该在 while 循环中使用单独的查询还是调整原始的 $issueSelect?以及如何?

标签: php mysql select distinct


【解决方案1】:

那么,您使用的是note_idissue_id 的复合键?您应该尝试使用GROUP BY 函数:

SELECT `issue_id`, `issue` FROM `notes` WHERE `assigned` = '$loginID' GROUP BY `note_id`, `issue_id` ORDER BY `note_id` ASC;

另外,mysql_* 现已弃用,您不应该真正使用它。查找 PDO 和 mysqli

【讨论】:

    【解决方案2】:

    你什么也得不到,因为$issuenull。您可以使用group by issue_id 代替distinct,但它是非标准的,可能会也可能不会根据您的安装工作。

    如果它不起作用,您可能需要使用select *,然后在 PHP 中过滤重复项。

    【讨论】:

    • 如果使用 PHP 过滤重复项,您会如何建议?
    • 保留一个数组,使用 issue_id 作为键。然后在输出一行之前,检查if(!isset($arr[$issueID]))
    【解决方案3】:

    必须实际选择问题字段(在我想要显示的其他字段中......这就是我所做的:

    $issueSelect = "SELECT DISTINCT issue_id, issue, reason, customer_id, order_id, return_id, author_id FROM notes WHERE assigned = '$loginID' ORDER BY note_id ASC";
        $issueQuery = mysql_query($issueSelect);
        while ($issueResult = mysql_fetch_assoc($issueQuery)){
    $issueID = $issueResult['issue_id'];
            $issue = $issueResult['issue'];
            $assigned = $issueResult['assigned'];
            $openDate = $issueResult['date'];
            $closeDate = $issueResult['close_date'];
            $orderID = $issueResult['order_id'];
            $returnID = $issueResult['return_id'];
            $customerID = $issueResult['customer_id'];
            $authorID = $issueResult['author_id'];
            $reason = $issueResult['reason'];
    }
    

    感谢大家的帮助...我会研究 POD 和 MySQLi

    【讨论】:

      【解决方案4】:

      您的原始查询是:

      SELECT DISTINCT issue_id FROM notes WHERE assigned = '$loginID' ORDER BY note_id ASC
      

      我认为由于 ORDER BY 子句,这会产生多行。您正在使用note_id 隐式扩展选择列表,然后排序,然后将note_id 投射出去,但是一个问题有多个注释,因此尽管有DISTINCT(因为 DISTINCT 在 ORDER BY 之前完成)。

      【讨论】:

        猜你喜欢
        • 2013-06-19
        • 2019-05-15
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 2016-09-05
        • 1970-01-01
        相关资源
        最近更新 更多