0

node.jsで作業するときに問題があります。すべてコードへのコメントで記述しようとしました。

最初に、対話者と最後のメガゲスに関する情報を含むダイアログの配列を作成する必要があります。

IM = {
    iUserId: false,
    socket: false,
    checkDialog: function(socket) {
        this.socket = socket;
        // Returned [{owner: 123, viewer: 432}]
        var sql = 'SELECT DISTINCT(`owner_user_id`), `viewer_user_id` FROM `phpfox_mail` WHERE `owner_user_id` = ' + this.iUserId + ' GROUP BY 1,2 UNION SELECT DISTINCT (`viewer_user_id`), `owner_user_id` FROM `phpfox_mail` WHERE `viewer_user_id` = ' + this.iUserId + ' GROUP BY 1,2 ORDER BY 1 ';

        connection.query(sql, function(err, rows) {
          if (err) throw err;

          async.map(rows, function(item, nextParent) {
              var sql = 'SELECT `mail_id`, `subject`, `preview`, `owner_user_id`, `viewer_user_id`, `viewer_is_new`, `time_stamp` FROM `phpfox_mail` WHERE (`viewer_user_id` = ' + item.viewer_user_id + ' OR `owner_user_id` = ' + item.viewer_user_id + ') AND (`viewer_user_id` = ' + item.owner_user_id + ' OR `owner_user_id` = ' + item.owner_user_id + ') ORDER BY `mail_id` DESC LIMIT 1';
              var dialogs = [];
              connection.query(sql, function(err, rows) {
              // ???
              });

          }, function(err, item) {
              // Here I have to get the generated array with all the necessary dialogue.
              console.log(item);

              IM.socket.emit('logger', {text: 'dataIsABuilding', key: 'success'});
              IM.socket.emit('dialogsBuilding', item);
          });
        });
    }
};

目的:メッセージと対話者に関する一連の情報を作成する。

図式:

  1. すべての対話者の配列を取得します。[{owner_user_id: 5757、viewer_user_id: 5866}、{etc...}]
  2. 段落番号 1 の結果を使用して、ダイアログから最新のレポートに関する一連の情報を取得します。[{mail_id: 98、件名: テスト、所有者: 5757、閲覧者: 5866、タイムスタンプ: 123566544}、{etc...}]
  3. 指定された識別子 (owner_user_id/viewer_user_id) のユーザーに関する情報を取得します。
  4. ダイアログに関するすべてのデータを同じ配列に収集します。

3 番目の段落で停止しました。つまり、最初の 2 つの配列に含まれるユーザーに関する情報を一貫して取得する方法がわかりません。

助けてください!

4

3 に答える 3

0

はい!:)

IM = {
    iUserId: false,
    socket: false,
    checkDialog: function(socket) {
        this.socket = socket;
        var sql = 'SELECT DISTINCT(`owner_user_id`), `viewer_user_id` FROM `phpfox_mail` WHERE `owner_user_id` = ' + this.iUserId + ' GROUP BY 1,2 UNION SELECT DISTINCT (`viewer_user_id`), `owner_user_id` FROM `phpfox_mail` WHERE `viewer_user_id` = ' + this.iUserId + ' GROUP BY 1,2 ORDER BY 1 ';
        connection.query(sql, function(err, rows) {
          if (err) throw err;

          async.map(rows, function(item, nextParent) {
              var sql = 'SELECT `mail_id`, `subject`, `preview`, `owner_user_id`, `viewer_user_id`, `viewer_is_new`, `time_stamp` FROM `phpfox_mail` WHERE (`viewer_user_id` = ' + item.viewer_user_id + ' OR `owner_user_id` = ' + item.viewer_user_id + ') AND (`viewer_user_id` = ' + item.owner_user_id + ' OR `owner_user_id` = ' + item.owner_user_id + ') ORDER BY `mail_id` DESC LIMIT 1;';
              var dialogs = [];
            connection.query(sql, function(err, rows) {
              if(err) return nextParent(err);
              nextParent(null, rows[0]);
            });

          }, function(err, item) {             
             async.map(item, function(dialog, next) {
                 connection.query('SELECT `user_name`, `full_name`, `user_profile_image` FROM `phpfox_user` WHERE `user_id` = ' + dialog.owner_user_id, function(err, user) {
                     next(err, {owner: user[0], dialog: dialog});
                 });
             }, function(err, rows) {                 
                 async.map(rows, function(dialog, next) {
                     connection.query('SELECT `user_name`, `full_name`, `user_profile_image` FROM `phpfox_user` WHERE `user_id` = ' + dialog['dialog']['viewer_user_id'], function(err, user) {
                         next(err, {viewer: user[0], dialog: dialog['dialog'], owner: dialog['owner']});
                     });
                 }, function(err, dialogs) {
                     console.log(dialogs);
                     IM.socket.emit('logger', {text: 'dataIsABuilding', key: 'success'});
                     IM.socket.emit('dialogsBuilding', dialogs);
                 });                 
             });
          });
        });
    }

そしてそれは働いた!:)

画面 http://screencloud.net//img/screenshots/411f98a583916a41142c40294fd2ee00.png

しかし、私にはこのコードのように思えます-それはひどいです!

于 2013-07-16T17:44:42.770 に答える