如何输出两次与JSON相同的MYSQL列

时间:2011-11-15 10:29:42

标签: mysql database 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。因此,我只需要能够将实际的sender_id以及化身拉出来,最好是单独的列。

有什么想法吗?

1 个答案:

答案 0 :(得分: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] ]);

        }

这将在每个返回的JSON行数组中的头像URL之前插入用户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
    );