从同一个MySQL Query中填充两个javascript数组

时间:2013-03-25 16:03:13

标签: php javascript mysql

我正在尝试从同一个查询(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 ",";
        }?>]

2 个答案:

答案 0 :(得分:2)

mysql_fetch_array是基于游标的函数。它将运行到结果集的末尾并停止。再次调用它仍将返回“结果集结束”。

..并且已被弃用。

你应该:

  1. 切换到PDO或mysqli
  2. 将整个结果集读出到本地var,然后循环创建你的javascript

答案 1 :(得分: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>

这允许您“同时”填写两个变量。实际上你让客户做的工作,我个人认为没有问题。

另一种,也许更明智的做法 - 我不会告诉你 - 是让页面对数据执行AJAX请求,以简单的JSON结构返回所有数据并通过它进行排序客户...