递归SELECT查询?

时间:2018-06-12 08:30:46

标签: php sql select recursion request

我正在尝试创建一个PHP Chatbox,我实现了我的SQL数据库:

ID      ID_sender      ID_parent      content
1       1              0              "Hello Mark"
2       2              1              "How are you Steve ?"
3       3              0              "Hi John, are you still coming tonight ?"
4       4              3              "Yes Elena, I will be there"
5       1              2              "I am good, what about you ?"

我想知道是否有办法实现一个请求,该请求将从对话和所有子消息中选择消息,并在输入中输入一个会话变量。 例如,如果我的会话变量为1,我想与我的请求进行以下对话

Steve : "Hello Mark"
Mark : "How are you Steve?"
Steve : "I am good, how are you ?"

我用count()方法尝试了一些请求,但是我无法获得好的结果。谢谢你的帮助。

4 个答案:

答案 0 :(得分:0)

在MySQL中执行此操作的唯一方法是使用循环,不断查询子项...使用JOIN或单独查询(除非每个聊天都有最大数量的邮件和一个非常大的查询)。

我放弃了这种方法,并使用一列来分隔聊天和时间戳列,以便在聊天中对消息进行排序。根据需要添加您需要的任何其他列,例如sender_id。

  SELECT *
    FROM chat_message
   WHERE chat_id = :id
ORDER BY sent_at ASC

答案 1 :(得分:0)

请检查以下sql语句 -

CircularList<Vertex> vertices = new CircularList<>();
/*...*/
Node<Vertex> vertex = vertices.getFirst();

假设您有不同的机制来获取用户名(可能来自基于发件人ID的不同表)

在这种情况下,您需要再处理一个案例 - 假设当您ID_sender一次与多个人聊天时,此查询将获取ID_sender = 1正在聊天的所有结果。

答案 2 :(得分:0)

$sql = "select * from table where ID_sender = ".$_SESSION['session_variable']." OR ID_parent = '".$_SESSION['session_variable']."'";

答案 3 :(得分:0)

请注意,如果某人与多人聊天,则可能会产生混淆。我建议你创建一个逻辑,你可以登录userid和(会话变量)和相关的用户ID。

SELECT id_parent, id_sender, content
FROM (
SELECT *
FROM [input_table]
WHERE id_sender = [@session variable]

UNION ALL

SELECT *
FROM [input_table]
WHERE id_parent =  [@session variable]
) A
ORDER BY ID

希望这会有所帮助..