2

私はMySQLデータベースからPHPでエンコードされたJSONオブジェクトを多くの場所で問題なく使用しています。構文でCOUNT(column)を使用して結果セットから作成しようとしていますが、問題が発生していると思いますが、修正方法がわかりません。

私のJSはこんな感じです...

createTeacherStatsTab = function(){
    $('#main').append('<div id="teacherStatsTab></div>"');
    $.getJSON("php/countMarkingPerTeacher.php", function(data) {
        $.each(data, function(key, val) {
            $('#teacherStatsTab').append(val.teacher + ' : ' + val.count(teacher));
        });
    });
}

そして私のPHPはこのように見えます...

$result = mysql_query("
SELECT teacher, COUNT(teacher) 
FROM Assessment
GROUP BY teacher
ORDER BY COUNT(teacher) DESC
");

$rows = array();
while($r = mysql_fetch_assoc($result)) {
$rows[] = $r;
}
print json_encode($rows);

戻ってくるデータは次のようになります...

[
{
teacher: "SDe",
COUNT(teacher): "413"
},
{
teacher: "OJe",
COUNT(teacher): "297"
},
{
teacher: "AMi",
COUNT(teacher): "257"
},
{
teacher: "ASt",
COUNT(teacher): "218"
},
{
teacher: "VJa",
COUNT(teacher): "194"
},
{
teacher: "SLa",
COUNT(teacher): "125"
},
{
teacher: "MCr",
COUNT(teacher): "99"
}
]

これはおそらくGROUPBYのIDを削除することと関係があるように感じますか?

誰か助けてもらえますか?

ありがとう!

4

4 に答える 4

3

オブジェクトはそのプロパティに括弧を使用できないと思います。そのため、呼び出すときは、オブジェクトの存在しないメソッドをval.count(teacher)呼び出そうとしています。代わりに呼び出すか、プロパティ名を変更してみてください。countvalval["count(teacher)"]

于 2012-11-10T13:07:54.363 に答える
2

全体として、問題はjson_encode無効なJSONを返しているように見えることです。オブジェクトキーには、オブジェクトキーの無効な文字が含まれています(以下の例のように文字列に含まれている場合を除く)()

[{
    "teacher": "SDe",
    "COUNT(teacher)": "413"
}, {
    "teacher": "OJe",
    "COUNT(teacher)": "297"
}, {
    "teacher": "AMi",
    "COUNT(teacher)": "257"
}, {
    "teacher": "ASt",
    "COUNT(teacher)": "218"
}, {
    "teacher": "VJa",
    "COUNT(teacher)": "194"
}, {
    "teacher": "SLa",
    "COUNT(teacher)": "125"
}, {
    "teacher": "MCr",
    "COUNT(teacher)": "99"
}]

COUNT(teacher)最も簡単な修正は、列のエイリアスを作成することです。

$result = mysql_query("
SELECT teacher, COUNT(teacher) AS count
FROM Assessment
GROUP BY teacher
ORDER BY COUNT(teacher) DESC
");

これにより、JSONが次のようにレンダリングされます。

[{
    teacher: "SDe",
    count: "413"
}, {
    teacher: "OJe",
    count: "297"
}, {
    teacher: "AMi",
    count: "257"
}, {
    teacher: "ASt",
    count: "218"
}, {
    teacher: "VJa",
    count: "194"
}, {
    teacher: "SLa",
    count: "125"
}, {
    teacher: "MCr",
    count: "99"
}]

これは有効なJSONであり(キーを文字列化する必要はありません)、既存の関数は(に変更val.count(teacher)した後val.count)正常に機能するはずです。

createTeacherStatsTab = function () {
    $('#main').append('<div id="teacherStatsTab></div>"');
    $.getJSON("php/countMarkingPerTeacher.php", function (data) {
        $.each(data, function (key, val) {
            $('#teacherStatsTab').append(val.teacher + ' : ' + val.count);
        });
    });
}
于 2012-11-10T13:58:31.310 に答える
1

これは、括弧が付いているため、JSがプロパティアクセスを関数呼び出しとして解釈するためです。

val.count(teacher)

私が推測する最も簡単な解決策は、COUNT()結果にエイリアス名を付けることです。

$result = mysql_query("
SELECT 
  teacher, 
  COUNT(teacher) AS teacher_count
FROM Assessment
GROUP BY teacher
ORDER BY COUNT(teacher) DESC
");

そして、次のようにアクセスします。

$('#teacherStatsTab').append(val.teacher + ' : ' + val.teacher_count);
于 2012-11-10T13:15:33.767 に答える
-2

あなたはjson.soの配列を取得しているので、ゼロ番目の要素を取得する必要があり、それを反復する必要があるので、このようにする必要があります

$.getJSON("php/countMarkingPerTeacher.php", function(data) {
    var myData = data[0];
    $.each(myData, function(key, val) {
        $('#teacherStatsTab').append(val.teacher + ' : ' + val.count(teacher));
    });
});

あなたのjsonがあなたのコードが機能したであろうよりもこのフォーマットであったなら

{
teacher: "SDe",
COUNT(teacher): "413"
},
{
teacher: "OJe",
COUNT(teacher): "297"
},
{
teacher: "AMi",
COUNT(teacher): "257"
},
{
teacher: "ASt",
COUNT(teacher): "218"
},
{
teacher: "VJa",
COUNT(teacher): "194"
}
于 2012-11-10T13:05:50.130 に答える