gpt4 book ai didi

PHP/MYSQL sql选择

转载 作者:行者123 更新时间:2023-11-29 14:33:16 26 4
gpt4 key购买 nike

需要一些帮助来解决这个问题。

我的功能:

function cleanDatabase()
{
$allowedTime = $this->time - 10;
$query = mysql_query("SELECT * FROM `chatsessions` WHERE `last_active` < ".$allowedTime." AND `public` = 0");
if( mysql_num_rows($query) > 0 ){
while($row = mysql_fetch_array($query)){
//move messages to history for evrey cID
$query2 = mysql_query(" SELECT * FROM `messages`, `chatsessions`
WHERE messages.cID = ".$row['cID']."
AND chatsessions.cID = messages.cID
AND chatsessions.public = 0");
if( mysql_num_rows($query2) > 0 ){
while($row2 = mysql_fetch_array($query2)){
$insert = mysql_query("INSERT INTO `message_history` (`cID`, `mID`, `user_id`, `sender`, `sendtime`, `message`) VALUES
(".$row2['cID'].", ".$row2['mID'].", ".$row2['user_id'].", '".$row2['sender']."', ".$row2['sendtime'].", '".$row2['message']."')");

if($insert)
$delete = mysql_query("DELETE FROM `messages` WHERE `cID` = ".$row2['cID']);

if(!$delete)
return false;
}
}
$query3 = mysql_query("DELETE FROM `chatsessions` WHERE `cID` = ".$row['cID']." AND public = 0");
}
}
}

该函数的作用

  1. 选择不公开的非事件聊天1

  2. 从所选聊天中获取消息

  3. 将消息插入历史记录

  4. 如果插入则删除旧消息

  5. 删除不公开的聊天 session = 1

需要做什么:

  1. 选择不公开的非事件聊天1

  2. 当删除具有该 cID 的最后一行时,从 cID 中选择消息(公共(public)行不会被删除,因此这些消息应始终保留)

  3. 将消息插入历史记录

  4. 如果插入则删除旧消息

  5. 删除不公开的聊天 session = 1

问题是 chatsession 中有多行具有相同的 cID(每个用户一个,永久的 pulbic=1 )我不知道如果存在具有 public = 1 的 ID 的聊天 session ,如何不删除消息

编辑:其工作原理的第 2 步

最佳答案

只是想了解您的设置,您可以从聊天 session 中检索 cID,该 cID 可以是公共(public)的或私有(private)的( public = 1 或 0 )。

聊天 session (cID) 中的消息都是公开的还是私有(private)的,因为它们将从聊天 session 继承属性。

或者是否能够从私有(private)房间广播公共(public)消息(如果是这种情况 - 您可以运行一个子查询/第二条语句)

编辑:

你可以减少整个过程,只使用 2 个 sql 语句(无循环) - 类似于

function cleanDatabase() {
$allowedTime = $this->time - 10;

// update history
$query = mysql_query("INSERT INTO `message_history` (`cID`, `mID`, `user_id`, `sender`, `sendtime`, `message`) SELECT messages.cID, messages.mID, messages.user_id, messages.sender, messages.sendtime, messages.message FROM `messages`, `chatsessions` WHERE `last_active` < ".$allowedTime." AND chatsessions.cID = messages.cID AND chatsessions.public = 0");

// delte old rows
$query = mysql_query("DELETE FROM `messages`, `chatsessions` WHERE `last_active` < ".$allowedTime." AND chatsessions.cID = messages.cID AND chatsessions.public = 0");
}

我稍后可以更好地测试这一点,但应该为您指明正确的方向吗?

标记

关于PHP/MYSQL sql选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com