PHP/MySQL每行的值不同
我搜索过,尝试过很多不同的方法,但都没有找到我想要的方法。我拥有的是一个直接消息系统,但我想在用户名旁边显示他们从该用户那里收到了多少新消息(如果超过0)。我尝试过的每件事都显示了所有对话的一个价值。在我的数据库中,我有一个列,如果收到消息的用户阅读了它,如果他们有消息,则将“否”变为“是”,否则显示“否” 提前感谢您的帮助 编辑: 我的数据库有一件事…只有对话中的第一条消息同时具有PHP/MySQL每行的值不同,php,mysql,Php,Mysql,我搜索过,尝试过很多不同的方法,但都没有找到我想要的方法。我拥有的是一个直接消息系统,但我想在用户名旁边显示他们从该用户那里收到了多少新消息(如果超过0)。我尝试过的每件事都显示了所有对话的一个价值。在我的数据库中,我有一个列,如果收到消息的用户阅读了它,如果他们有消息,则将“否”变为“是”,否则显示“否” 提前感谢您的帮助 编辑: 我的数据库有一件事…只有对话中的第一条消息同时具有到\u id和来自\u id之后,对话中的所有其他消息都只有来自\u id。所以我要做的是计算有多少from\u
到\u id
和来自\u id
之后,对话中的所有其他消息都只有来自\u id
。所以我要做的是计算有多少from\u id
不是您的user\u id
,所以是未登录的user\u id。如果有意义的话
以下是我访问数据库的代码:
//获取对话
$get_conversations = "SELECT dm.convo_id, dm.message_id, dm.to_id, dm.from_id, dm.user2read, u.name, u.user_id" .
" FROM users u" .
" JOIN direct_messages dm" .
" ON dm.from_id = u.user_id" .
" OR dm.to_id = u.user_id" .
" WHERE u.user_id = " . $_SESSION['user_id'];
" GROUP BY dm.convo_id" .
" LIMIT 1";
// Run the conversation query
$convo_result = mysql_query($get_conversations);
然后是一些HTML代码
在body标签中还有更多的php
<?php
while ($teg = mysql_fetch_array($convo_result)) {
if($teg) {
$to_id2 = $teg['to_id'];
$from_id2 = $teg['from_id'];
if($from_id2 == $_SESSION['user_id']) {
$id_of_other_person = $to_id2;
} else if($from_id2 != $_SESSION['user_id']) {
$id_of_other_person = $from_id2;
}
// Get the name of the other person
$get_other_name = "SELECT name FROM users WHERE user_id = " . $id_of_other_person;
// Run the query on the other person's name
$query_name = mysql_query($get_other_name);
if($query_name) {
$yelp = mysql_fetch_array($query_name);
$name_of_other_person = $yelp['name'];
}
$get_user2read = "SELECT dm.convo_id, dm.message_id, dm.to_id, dm.from_id, dm.user2read, u.name, u.user_id" .
" FROM users u" .
" JOIN direct_messages dm" .
" ON dm.from_id = u.user_id" .
" OR dm.to_id = u.user_id" .
" WHERE u.user_id = " . $_SESSION['user_id'];
" AND user2read = 'no'" .
" GROUP BY dm.convo_id" .
" LIMIT 1";
$query_user2read = mysql_query($get_user2read);
$alg = mysql_fetch_array($query_user2read);
?>
<?php if(COUNT($alg['user2read']) > 0 && $alg['user2read'] == 'no') : ?>
<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
<?php else : ?>
<?php endif; ?>
<?php
}
}
?>
编辑:我删除了这个
$yelp=mysql\u fetch\u数组($query\u name);
$name\u of_other\u person=$yelp\['name'\]代码>
看起来不对
您需要像循环$teg一样循环$yelp。这是不正确的:
<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
然后您可以使用$teg['unread\u count']
获取该对话中未读邮件的计数
我认为您不需要内部查询$get\u user2read
。所有信息现在都在$get\u conversations
中。这是错误的,因为它没有在循环的迭代中获得特定于对话的行。旁注:没有提到session_start()代码>任何地方。您正在使用它,对吗?;-)如果没有,那么您必须将其包含在所有页面中。再加上这个和其他类似的($alg\['user2read'\])
您放置反斜杠的方式,我觉得这不正确。如果您试图转义引号,则需要执行\'
是的,我正在使用session\u start();我没有在代码中加反斜杠,它是在我粘贴代码时粘贴的,出于一些奇怪的原因。我编辑并删除了反斜杠。为什么您有限制1
,但在结果上有循环?是否要返回所有用户的对话?我有限制1
的查询不在while
循环中。我有第一个SELECT
语句来获取对话,然后我使用第二个语句来获取新邮件的数量,其中user2read='no'
对我有效,我可以获取发件人的姓名,我遇到的问题是,我无法获取每个会话有多少条新消息这就是我使用的
来获取新消息的数量,但它只显示每个消息的相同数量。当我用这个会话替换$get\u会话时,我收到一个内部服务器错误,我不知道我做错了什么好的,这帮了我的忙。我现在的问题是,它只显示了一次对话。你看到我上面的评论了吗?如果你想要不止一个对话,为什么要说LIMIT 1
?是的,我去掉了LIMIT 1
,现在我有三个对话,都是两条新消息。我想知道你为什么在查询中返回像dm.message\u id
这样的字段。因为您只是为每个对话返回一行,所以这将从对话中随机选取一个消息ID。重点是什么?
<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
$get_conversations = "SELECT dm.convo_id, dm.message_id, dm.to_id, dm.from_id, u.name, u.user_id, SUM(dm.user2read = 'no') unread_count" .
" FROM users u" .
" JOIN direct_messages dm" .
" ON dm.from_id = u.user_id" .
" OR dm.to_id = u.user_id" .
" WHERE u.user_id = " . $_SESSION['user_id'] .
" AND dm.user2read = 'no' " .
" GROUP BY dm.convo_id" .
" LIMIT 1";