цикл while не работает, отображая только одну запись при использовании group by

0

У меня есть таблица (MySQL), где элементы могут быть дублированы (room_number и menu_probelm строки x такие же, как room_number и menu_probelm строки y). Я пытаюсь показать только строку y, если это дубликат строки x. Таблица имеет 4 строки с одинаковыми значениями room_number и menu_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 Tabel
| rid (ai) | room_number | menu_problem | примечания |
всего 5 записей. У трех из них есть комната 135 с проблемным ковровым покрытием, у всех у них разные заметки, и это только показывает мне первую запись за 1 запись других 2, и я хочу не показывать 1-ю запись, а только 2-й и 3-й (дубликаты), Я попытался поместить всю таблицу в ACSSI, но это выглядело беспорядок, и я попробовал HTML-таблицу, но это не показало бы ее.

Теги:
while-loop

1 ответ

0

Может возникнуть проблема с вашим SQL-запросом. Вы пытаетесь сделать SELECT * в своем запросе, который запрашивает все столбцы в таблице. Но так как вы делаете 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 не имеет возможности узнать, какое значение этих других столбцов он должен выбрать для этой группы.

  • 0
    Спасибо за код. Я добавил его, зарегистрировался в phpmyadmin и проверил с помощью print_r ($ row_Recordset1); и я вижу, что частота (количество) 3, как я хочу. Но он показывает только 1 строку записи. у тебя есть другие мысли?
  • 0
    Предложение HAVING в запросе не позволяет отображать группы с частотой 1.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню