2011-11-15 34 views
1

我正在使用MySQL構建郵件系統。一切都很好,但我需要能夠做一件特別的事情。如何輸出與JSON相同的MYSQL列兩倍

在其中一個表中,我有'sender_id'列。

我把這個'sender_id'並通過一個函數運行它,然後檢索用戶頭像並輸出返回的JSON響應中的鏈接。

我需要此鏈接...但我也需要能夠檢索'sender_id'本身作爲一個數字,以便我可以在jQuery中測試它。

那麼最終我原來的'sender_id'是如何被複制並放入一種虛擬列'之前'它已被我的'獲得頭像'功能處理。

我的查詢等後使用,以輸出JSON的代碼如下: -

/* 
    * Output 
    */ 
    $output = array(
     "sEcho" => intval($_GET['sEcho']), 
     "iTotalRecords" => $iTotal, 
     "iTotalDisplayRecords" => $iFilteredTotal, 
     "aaData" => array() 
    ); 

    while ($aRow = mysql_fetch_array($rResult)) 
    { 
     $row = array(); 
     for ($i=0 ; $i<count($aColumns) ; $i++) 
     { 
      if ($aColumns[$i] == "version") 
      { 
       /* Special output formatting for 'version' column */ 
       $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; 
      } 
      if ($aColumns[$i] == "sender_id") 
      { 
       /* Special output to render Avatar by user id */ 
       $row[] = commentplayer_get_user_avatar($aRow[ $aColumns[$i] ]); 

      } 
      else if ($aColumns[$i] == "message") 
      { 
       /* General output */ 
       $row[] = strip_slashes($aRow[ $aColumns[$i] ]); 
      } 

      else if ($aColumns[$i] != ' ') 
      { 
       /* General output */ 
       $row[] = $aRow[ $aColumns[$i] ]; 
      } 
     } 
     $output['aaData'][] = $row; 
    } 

    echo json_encode($output); 
?> 

$ aColumns是被前面所定義的列的陣列,顯然「SENDER_ID」是這些中的一個。正如你所看到的,我已經放入了一個條件語句,以便sender_id作爲化身鏈接而不是實際的sender_id重新構建。因此,對於sumarise,我只需要能夠將實際的sender_id和頭像拉到一起,最好放到單獨的列中。

任何想法?

+0

我其實已經通過在DOM比較文本而不是用戶ID,H但是這將是更爲有效的,如果我能做到這一點的服務器端找到了解決我的問題與jQuery。如果任何人都能指出我會朝着正確的方向發展,那將是很棒的。 – gordyr

+0

你的評論讓我難過。 – AlienWebguy

+0

順便說一句:我估計'如果$ aColumns [$ i]!=''...'的機率實際上使得任何差異都很低。 –

回答

1

您可以添加一行代碼處理柱sender_id

 if ($aColumns[$i] == "sender_id") 
     { 
      /* Output user id */ 
      $row[] = $aRow[ $aColumns[$i]]); 
      /* Special output to render Avatar by user id */ 
      $row[] = commentplayer_get_user_avatar($aRow[ $aColumns[$i] ]); 

     } 

這將插入用戶ID權之前,每個頭像URL返回的JSON行陣列。

實際上,擺脫列上的for-loop會更好,只需填寫$row所需的項目,用專用名稱索引,而不是依賴順序。這使得查看$output實際附加的內容變得更加容易。這確實意味着在客戶端解釋JSON時,必須將該行視爲對象而不是數組。

$row = array(
     "version" => ($aRow["version"] == "0") ? '-' : $aRow["version"], 
     "sender_id" => $aRow["sender_id"], 
     "avatar" => commentplayer_get_user_avatar($aRow["sender_id"]), 
     "message" => strip_slashes($aRow["message"]), 
     // other items here 
    ); 
+0

感謝您的好評。 :-)我對使用JSON非常陌生,有時即使是最看似簡單的東西也會讓你困惑一陣子。非常感謝您的幫助。 – gordyr

相關問題