【问题标题】:while loop not working only displaying one record when useing group by使用 group by 时,while 循环不起作用仅显示一条记录
【发布时间】:2015-05-10 05:42:24
【问题描述】:

我有一个表 (MySQL),其中项目可能重复(x 行的room_numbermenu_probelm 与y 行的room_numbermenu_probelm 相同)。我试图只显示第 y 行,如果它是第 x 行的副本。该表有 4 行具有相同的 room_numbermenu_probelm 值,但 col3 (notes) 不同。出于某种原因,它向我显示了第一个重复行(y),但没有显示其他两个。

这是我的代码:

$query_Recordset1 = "SELECT *, count(*) FROM damage GROUP BY room_number, menu_probelm HAVING count(*) > 1 ";
$Recordset1 = mysql_query($query_Recordset1, $hk) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

这是我表中的while语句:

<table width="80%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <th align="left" valign="top" scope="col">Record Number</th>
      <th align="left" valign="top" scope="col">Room Number</th>
      <th align="left" valign="top" scope="col">Room Number</th>
      <th align="left" valign="top" scope="col">Error Found </th>
      <th align="left" valign="top" scope="col">Delete</th>
    </tr>
<?php do { ?>
    <tr>
      <td align="left" valign="top"><a href="#"><img src="../images/error2.png" width="25" height="25" alt="<?php echo $row_Recordset1['rid']; ?>"></a></td>
      <td align="left" valign="top"><?php echo $row_Recordset1['room_number']; ?></td>
      <td align="left" valign="top"><?php echo $row_Recordset1['menu_probelm']; ?></td>
      <td align="left" valign="top"><?php echo $row_Recordset1['notes']; ?></td>
      <td align="left" valign="top"></a><a href="delete.php?rid=<?php echo $row_Recordset1['rid'];?>"><img src="../images/Remove.png" width="25" height="25" alt="Delete Record"></a></td>
    </tr>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
    <tr>
      <td colspan="2" align="left" valign="top">&nbsp;</td>
      <td colspan="3" align="left" valign="top">&nbsp;</td>
    </tr>
</table>

这是我的 SQL 表
|摆脱 (ai) |房间号 |menu_problem|笔记 |
总共有 5 条记录。他们中的三个人的房间 135 有问题的地毯,他们都有不同的笔记,它只向我显示前 1 条记录,其他 2 条记录,我想要的是不显示第 1 条记录,而只显示第 2 条和第 3 条(重复) . 我试图将整个表格放在 ACSSI 中,但它看起来很乱,我尝试了一个 HTML 表格,但它不会显示它。

【问题讨论】:

    标签: php sql while-loop


    【解决方案1】:

    您的 SQL 查询可能有问题。您正在尝试在查询中执行 SELECT *,它要求表中的 all 列。但是由于您正在执行GROUP BY,因此您只能SELECT以下列:room_number, menu_probelm,以及每个组的COUNT

    试试这个查询:

    SELECT room_number, menu_probelm, count(*) AS 'frequency'
    FROM damage
    GROUP BY room_number, menu_probelm
    HAVING frequency > 1;
    

    您不能SELECT GROUP BY 中的所有列的原因是 MySQL 引擎无法知道它应该为该组选择的其他列的哪个值。

    【讨论】:

    • 感谢您的代码。我添加了它并在 phpmyadmin 中签入并使用 print_r($row_Recordset1); 进行了检查我确实看到频率(计数)是我想要的 3。但它只显示 1 条记录行。你还有其他想法吗?
    • 查询中的HAVING 子句将阻止显示频率为1 的组。
    • 我不确定我们是否在同一页面上。SQL 告诉我频率应该是 3。但它只显示第一条记录(应该是跳过那个并显示记录 2 和 3。
    • 请编辑您的问题并包括表格(如果可能 - 您说它只有 4 行)和预期结果。
    • @tim 该问题已被编辑以添加我可以添加的 SQL 表
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多