2012-09-16 85 views
0

我是PHP的新手,所以如果我犯了一個愚蠢的錯誤,請耐心等待。 我的問題是,如果2個用戶打開兩個以上的對話,我的消息系統顯示與第二個對象的對話中的第一個主題的對話。我不允許張貼圖片,所以我會試着鍵入瞭解釋: 現在我得到的結果看起來像這樣:在While循環中,在MYSQL中只使用最後一個結果數組

Subject1:你好 - 嘿,你今天好嗎? - 我很好,謝謝!


Subject2:Goodbye - 嘿,今天過得怎麼樣? - 我很好,謝謝! - 很高興和你說話! - 保重!


在上面的例子中,可以看到從所述第一會話也被顯示在第二會話中的消息。

我希望每個主題的對話只顯示在相應的主題中。我試圖在我的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 />';} 
} 
+2

如果您正確縮進代碼,這將更容易進行調試。事實上,很難從哪裏看到哪些線路被調用。 – andrewsi

回答

2

我不知道如果我理解正確的話你的整個問題,但...一個非常簡單的解決辦法是給每個會話的唯一標識符,做使用該選項而不是可能不唯一的主題

相關問題