2011-11-15 5 views
1

J'utilise MySQL pour créer un système de messagerie. Tout fonctionne à merveille jusqu'à présent, mais je dois être capable de faire une chose en particulier.comment générer la même colonne MYSQL deux fois que JSON

Dans l'une des tables, j'ai la colonne 'sender_id'.

Je prends ce 'sender_id' et l'exécute à travers une fonction qui récupère ensuite l'avatar des utilisateurs et sort le lien dans la réponse JSON retournée.

J'ai besoin de ce lien ... Mais j'ai aussi besoin de pouvoir récupérer le 'sender_id' lui-même sous forme de nombre afin que je puisse le tester dans jquery. Donc, ce que je veux dire, c'est que l'original 'sender_id' soit dupliqué et mis dans une sorte de colonne virtuelle 'before', il a été traité par ma fonction 'get avatar'.

Le code que je utilise la sortie JSON après les requêtes, etc. est la suivante: -

/* 
    * 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 est le tableau de colonnes qui sont définies plus haut, de toute évidence « sender_id » est l'un de ces . Comme vous pouvez le voir, j'ai mis une instruction conditionnelle pour que le sender_id soit retruné en tant que lien avatar plutôt que sender_id. Donc, pour résumer, je dois juste être en mesure de tirer le sender_id réelle ainsi que l'avatar, de préférence dans une colonne séparée.

Des idées?

+0

J'ai effectivement trouvé une solution à mon problème avec jQuery en comparant le texte dans les DOM plutôt que l'utilisateur ID de, outefois il serait beaucoup plus efficace si je pouvais le faire côté serveur. Si quelqu'un peut me diriger dans la bonne direction, ce serait formidable. – gordyr

+0

Vos commentaires me rendent triste. – AlienWebguy

+0

BTW: J'estime les chances de 'si $ aColumns [$ i]! = '' ...' réellement faire une différence vraiment faible. –

Répondre

1

Vous pouvez ajouter une ligne au code de traitement de la colonne 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] ]); 

     } 

Cela insérera l'ID utilisateur juste avant l'URL de l'avatar dans chaque ligne renvoyée-tableau JSON.

En fait, il serait plus agréable de se débarrasser de la boucle for-over sur les colonnes, et il suffit de remplir $row avec les éléments dont vous avez besoin, indexés par des noms propres au lieu de dépendre de l'ordre. Cela rend plus facile de voir ce qui est réellement ajouté à $output. Cela signifie que lors de l'interprétation du JSON sur le client, vous devrez traiter la ligne comme un objet plutôt que comme un tableau.

$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

Merci pour la bonne réponse. :-) Je suis très novice dans le travail avec JSON et parfois même les choses les plus simples peuvent vous dérouter pendant un moment. Votre aide est tres apprecie. – gordyr

Questions connexes