当前位置: 首页 > 知识库问答 >
问题:

具有两个变量的SQL语句

马国源
2023-03-14

我正在用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;
 }

共有1个答案

逄兴昌
2023-03-14

您需要首先解决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类的正确代码: 谢谢你的时间 问题答案: 从某种意义上讲,您正在重写超类的字段。但是意外地做起来容易得多,因为没有字段重载(您只有给定名称的一个变量,类型无关紧要)。这称为变量“隐藏”或“阴影