我正在查询一个名为request的表,如下所示
+-------------------------------------------------------------------------+
| message_id | client_id | admin_id | message | date_posted | read_status |
+-------------------------------------------------------------------------+
由于管理员需要获取所有未读取的消息(read_status = 0),但我不知道如何获取结果并将其显示在不同的标签示例中
Client 44
Hi Sir
然后是另一个部分(div)
Client 87
Give me the number
因此来自同一客户端的消息被放在一起并插入其自己的div中 事情是同一个客户端可以有多行具有不同的消息。哦,对于选中的每一行,我想将read_status更新为1,以便稍后不再选择。 非常感谢任何帮助!
PS 我使用PDO查询准备好的语句以保持清洁!
答案 0 :(得分:2)
如果我理解正确,您需要<div
&gt;对于每个客户端,其中<div>
包含<div>
所属的客户端的所有未读邮件。
这意味着您需要按客户对结果进行分组。有两种方法可以做到这一点:
client_id
更改的时间,以便您可以关闭之前的<div>
并为新客户端打开新的消息; 对于第一个选项,您可以执行以下操作:
$current_client_id = 0;
foreach ($conn->query("SELECT ... ORDER BY `client_id` ASC") as $message) {
if ($message['client_id'] != $current_client_id) {
if ($current_client_id > 0) {
// if it's 0, there is no <div> to close yet
echo '</div>';
}
echo '<div>';
echo '<p>Messages for client #' . $message['client_id'] . '</p>';
$current_client_id = $message['client_id'];
}
echo 'message details here';
}
if ($current_client_id > 0) {
// if it's not 0, there were messages so you need to
// close the last client's <div>
echo '</div>';
}
对于第二个选项,您可以执行以下操作:
$grouped_messages = array();
foreach ($conn->query("SELECT ...") as $message) {
$client_id = $message['client_id'];
if (!isset($grouped_messages[$client_id])) {
$grouped_messages[$client_id] = array();
}
$grouped_messages[$client_id][] = $message;
}
foreach ($grouped_messages as $client_id => $client_messages) {
echo '<div>';
echo '<p>Messages for client #' . $client_id . '</p>';
foreach ($client_messages as $message) {
echo 'message details here';
}
echo '</div>';
}
第一个选项更有效,因为你只循环一次。但在我个人看来,第二个选项提供更清晰,更易于阅读和理解的代码,所以如果你不处理大量的消息,或者如果你将消息数组传递给单独的视图层或模板。
您必须自己填写查询,我不知道您是想要获取所有字段还是仅查看其中的一些字段,请按date_posted
对其进行排序,仅过滤具有特定{{}的消息例如,或者将admin_id
表与另一个表连接起来。
我也没有使用预备语句,但你可以很容易地用request
替换$conn->query()
上的循环:
$stmt = $conn->prepare("SELECT ...");
$stmt->execute();
foreach ($stmt->fetchAll() as $message) {
只要您没有绑定任何参数,PDO::query()
基本上就是简写。