我正在用php和ajax创建一个消息传递站点。
获取对话有问题。
问题是,每当两个用户在他们之间聊天时,就会有两个id不同的行;
A和B正在聊天,彼此只写了4条消息
消息数据库是这样的
id senderid recieverid
1 a.id b.id
2 b.id a.id
3 b.id a.id
4 a.id b.id
我的目标是用这个代码获取记录
SELECT DISTINCT senderid, recieverid from messages WHERE (senderid = '".$pageowner."' OR recieverid='".$pageowner."')
$页面所有者是登录的用户;
使用这种方法,我可以进行两次相同的对话
a
代码在页面上给了我两次对话,我只想得到一个结果;
我的整个php代码是这样的
if(isset($_POST['id'])){
include 'config.php';
$pageowner = $_POST['id'];
$sql = "SELECT DISTINCT senderid, recieverid from messages WHERE (senderid = '".$pageowner."' OR recieverid='".$pageowner."')";
$result = mysqli_query($connect, $sql);
$conversations = mysqli_fetch_all($result);
$output = "";
foreach($conversations as $conversation){
$senderonmessages = $conversation[0];
$recieveronmessages = $conversation[1];
if($pageowner == $senderonmessages){
$convname = $recieveronmessages;
}else{
$convname = $senderonmessages;
}
$sql = "SELECT id, name, surname, userimage FROM users WHERE id='".$convname."' ORDER BY id" ;
$resconv = mysqli_query($connect, $sql);
$user = mysqli_fetch_assoc($resconv);
$output .= '
<div class="conversationuser" id='.$user['id'].'>
<img src="'.$user['userimage'].'">
<span id="status"></span>
<div class="conv-info">
<h4><a href="">'.$user['name'].' '.$user['surname'].'</a></h4>
<p>Axirinici yazdigim mesaj <span id="time">10:34 AM</span></p>
</div>
<div class="conv-additional-info">
<span id="notif">1</span>
<i class="fas fa-ellipsis-v"></i>
</div>
</div>';
}
echo $output;
}
您需要首先解决sql注入问题。如果不这样做,数据库中就不会有任何数据需要担心,因为有人会删除它。
https://www.php.net/manual/en/security.database.sql-injection.php
此外,您的查询会准确地为您提供所需的内容:DISTINCT senderid, Receverid
为了解决您的问题,我会创建一个类似于以下内容的视图:
create view conversations as
SELECT senderid, recieverid FROM messages GROUP BY 1, 2
UNION
SELECT receiverid, senderid FROM messages GROUP BY 1, 2
然后,您可以从该视图中选择,并获得所需内容。
如注释中所述,联合会将为您提供独特的功能,因此您甚至不需要它。。。
我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在Java中是不可能的。 这里有一些伪代码,我只想用开关来实现。
问题内容: 可以说我得到了以下内容: 错误:将varchar值’,’转换为数据类型int时转换失败。 我了解为什么会出现错误,但我不知道如何解决… 问题答案: 您需要将其作为动态sp执行,例如
行动时间 - SQL语句作为变量 unlang的一个非常强大的功能是它允许您通过sql模块执行SQL查询。查询实际上是一个变量,此查询的返回值是变量的值。我们现在将修改上一个练习以从数据库中获取时间并将其添加到Reply-Message值。 要执行SQL查询,您需要包含并配置FreeRADIUS以使用sql模块。 sql模块还需要在至少一个部分中使用,例如,授权或记帐部分。 1.在FreeRADI
问题内容: 我刚刚开始使用Sass和Compass,我喜欢它。我想做的就是利用该功能简化重复性任务。但是,我仅看到了插入一个变量的示例,并且我希望能够使用多个变量。 标准方式(来自[Sass参考): 很棒,但是我希望能够执行以下操作: 这可能吗? 问题答案: 我在同一条船上(Sass / Compass的初学者),不得不做类似的事情。这是我使用嵌套列表想到的: 这不是最优雅的解决方案,但是如果您找
问题内容: 我在VBA中有以下代码: newvalue和tempvalue都是全局变量,并且已经被设置为值。语法上,这有意义吗?还是我缺少引号? 问题答案: 试试这个: 如果是 数字 : If是 字符串 (如果/不包含单引号): If是 字符串 (如果/包含单引号,如): 如果是 日期 : 感谢@HansUp在注释中指出, MID是函数的名称,因此在SQL语句中将该字段名称放在方括号或别名中会更安
问题内容: 以下是我的项目代码的一部分: 我很快意识到,这样做会在Body类中创建 两个 名为x的变量,并在Body中创建 另外 两个名为y的变量。这怎么可能?为什么Java甚至允许它呢? 我认为这是Body类的正确代码: 谢谢你的时间 问题答案: 从某种意义上讲,您正在重写超类的字段。但是意外地做起来容易得多,因为没有字段重载(您只有给定名称的一个变量,类型无关紧要)。这称为变量“隐藏”或“阴影