0

同じクエリ ( ) からこれら 2 つの配列 (time2および)を埋めようとしていますが、最初の配列だけが埋められており、その理由がわかりません... 同じクエリから呼び出されていることに注意してください。が実装されており、いくつかの配列位置の値を取得する必要がある場合、正しい値が表示されるはずです。それが、別の同一のクエリを作成できない理由です。 これは可能ですか?text$result
ORDER BY RAND ()

    //Array Time
    var time2 = [<?php $title=$_GET["title"];

    $result = mysql_query("SELECT tag, round(avg(timecode)) as timecode, group_id
    FROM tags
    WHERE tags.filename = '".$title."'
    GROUP BY group_id, tag
    ORDER BY RAND()");

    while($row = mysql_fetch_array($result))
        {
        $timecode = $row['timecode'];
        print $timecode;
        print ",";
        }?>]

    //Array Text

    var text = [<?php

    while($row = mysql_fetch_array($result))
        {
        $tag = $row['tag'];
        print "'";
        print $tag;
        print "'";
        print ",";
        }?>]
4

2 に答える 2

2

まず、関数の mysql_* ファミリから明確に変更する必要があります。これらは明らかに非推奨であるためです。そうしない唯一の正当な理由は、PHP のインストールが古く、サーバーを制御できないこと (ホストされている場合) であり、それでさえほとんど受け入れられません。

私はこれを行うことであなたの問題を解決します:

<script>
var time2 = [];
var text = [];
<?php
  $title=$_GET["title"];

  $result = mysql_query("SELECT tag, round(avg(timecode)) as timecode, group_id FROM tags WHERE tags.filename = '".$title."' GROUP BY group_id, tag ORDER BY RAND()");

  while($row = mysql_fetch_array($result))
  {
    echo "time2.push('".$row['timecode']."');";
    echo "text.push('".$row['tag']."');";
  }
?>
</script>

これにより、2 つの変数を「同時に」満たすことができます。実際には、クライアントに仕事を任せますが、個人的には問題はありません。

もう 1 つの、おそらくより賢明な方法 (ここでは説明しません) は、ページにデータの AJAX 要求を実行させ、すべてのデータを単純な JSON 構造で返し、それをクライアントでソートすることです。 .

于 2013-03-25T16:48:46.190 に答える
2

mysql_fetch_arrayカーソルベースの機能です。結果セットの最後まで実行され、停止します。もう一度呼び出すと、「結果セットの終わり」が返されます。

..そしてそれは非推奨です。

あなたがすべき:

  1. PDO または mysqli に切り替える
  2. 結果セット全体をローカル変数に読み取り、それをループして JavaScript を作成します
于 2013-03-25T16:08:26.130 に答える