2011-11-15 18 views
1

私は、メッセージングシステムを構築するためにMySQLを使用しています。これまでのところすべてが美しく動作しますが、私はある特定のことをする必要があります。JSONと同じMYSQL列を2回出力する方法

テーブルの1つには、 'sender_id'という列があります。

私はこの 'sender_id'を受け取り、ユーザーのアバターを取得し、返されたJSON応答のリンクを出力する関数を通して実行します。

私はこのリンクが必要です...しかし、私はjenderでそれに対してテストできるように、 'sender_id'自体を数字として取り出すこともできる必要があります。

私は最終的に元の 'sender_id'が複製され、 '前'という種類の仮想列に入れられました。それは私の 'get avatar'関数によって処理されました。

私は、クエリなどの後に出力に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ではなくアバターリンクとして再実行されるように条件文を入れました。だから、私はちょうど別の列に、実際のsender_idだけでなく、アバターを引き出すことができることをsumariseにする必要があります。

アイデア?

+0

私はこのサーバー側の操作を行うことができれば、それははるかに効率的であるowever私は実際には、DOM内のテキストではなく、ユーザーIDを比較することによって、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] ]); 

     } 

これは、各アバターのURLは、JSONの行の配列を返し、右の前にユーザーIDを挿入します。

実際には、列のforループを取り除き、順序に依存せずに適切な名前でインデックスを付けて、必要な項目を$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

関連する問題