0

私はにPHP慣れていないので、ばかげた間違いをしている場合は、しばらくお待ちください。私の問題は、2 人のユーザーが 2 つ以上の会話を開くと、メッセージング システムが、2 番目の主題との会話の最初の主題からの会話を表示することです。画像を投稿することは許可されていないため、説明を入力してみます: 現在、次のような結果が得られています。

Subject1: こんにちは - こんにちは、今日はお元気ですか? - おかけさまで元気です!


Subject2: さようなら - こんにちは、今日はお元気ですか? - おかけさまで元気です!- お話できてよかったです!- 気をつけて!


上記の例では、最初の会話のメッセージが 2 番目の会話にも表示されていることがわかります。

各件名からの会話は、適切な件名でのみ表示されるようにします。クエリで使用する各ループの最後のサブジェクトのみを取得しようとしていMySQLますが、foreach ループから最後の配列値を取得すると、以前のサブジェクトが返されMySQLます。リクエストやコードがわかりにくかったらすみません。私は何日もノンストップでこの作業に取り組んできましたが、目標にはまったく近づいていません。助けてください!

ここに私のコードのスニペットがあります:

$sql = mysql_query("SELECT * FROM private_messages WHERE to_id='$my_id' AND         recipientDelete='0' GROUP BY subject ORDER BY id DESC LIMIT 200");

$resultArrays2 = array();
while($row = mysql_fetch_array($sql)){
$resultArrays2 = array( 
$subject = $row['subject']);

foreach ($resultArrays2 as $value2 => $i2){
//foreach ($i as $second){
$array2[] = $i2;
    }

$my_uname = $row['message'];
$date = strftime("%b %d, %Y",strtotime($row['time_sent']));
if($row['opened'] == "0"){ 
        $textWeight = 'msgDefault';
} else {
        $textWeight = 'msgRead';
}
$fr_id = $row['from_id'];
$stringsubfirst = (end($array2));    
// SQL - Collect username for sender inside loop
$more = mysql_query("SELECT id, username FROM mymembers WHERE id='$p' LIMIT 1");
while($rz = mysql_fetch_array($more)){ $MEid = $rz['id']; $ME = $rz['username']; }
$ret = mysql_query("SELECT id, username FROM mymembers WHERE id='$fr_id' LIMIT 1");
while($raw = mysql_fetch_array($ret)){ $Sid = $raw['id']; $Sname = $raw['username']; }

$reachingsub = mysql_query("SELECT * FROM private_messages WHERE     subject='$stringsubfirst' AND recipientDelete !='1' LIMIT 100") or die(mysql_error());
$resultArrays = array();
while($rn = mysql_fetch_array($reachingsub)){
$resultArrays = array(
$finalsub = $rn["subject"]);    
foreach ($resultArrays as $value => $i){

$array[] = $i;
    }
}
$stringsub = (end($array));
$stringcur = (current($array));
$stringnext = (next($array));
$stringprev = (prev($array));
$stringfirst = (reset($array));



$reaching = mysql_query("SELECT * FROM private_messages WHERE subject='$stringsub' AND recipientDelete !='1' ORDER BY id DESC LIMIT 200") or die(mysql_error());
    $resultArrays2 = array();
while($rw = mysql_fetch_array($reaching)){
    $resultArrays2 = array(
    $subsub = $rw["subject"]);
        foreach ($resultArrays2 as $value2 => $i2){

        $array2[] = $i2;
        $array3[] = $value2;
        }
        $stringsub2 = (end($array2));
        $stringcur2 = (current($array2));
        $stringnext2 = (next($array2));
        $stringprev2 = (prev($array2));
        $stringfirst2 = (reset($array2));
    $subsub2 = $rw["subject"];
    $usingid = $rw["id"];
    $insidemessage = $rw["message"];
    $fi = $rw["from_id"];
    $ti = $rw["to_id"];
    $minutes = strftime("%b %d, %r",strtotime($rw['time_sent']));
    if($p !== $ti){$listname = $ME;}else{$listname = $Sname;}

    if($subject !== $stringsub2 || $stringcur2 !== $stringnext2){$othermessage .= '<div  style="display:none;">'.$ti.$subsub2.$subject.$stringsub2.$stringsubfirst.'</div>';}

    if($subject == $stringsub2 || $stringcur2 == $stringnext2){$othermessage .= '<br />'.'<div style="display:none;">'.$ti.$subsub2.$subject.$stringsub2.$stringsubfirst.'</div>'.
    '<div style="font-weight:bold;">'.$listname.': '.$minutes.'</div>'.$insidemessage.'<br />';}
}
4

1 に答える 1

2

問題全体を正しく理解したかどうかはわかりませんが...非常に簡単な解決策は、各会話に一意の識別子を与え、おそらく一意ではない件名の代わりにそれを使用して選択を行うことです

于 2012-09-16T15:06:12.677 に答える