【问题标题】:Retrieve Most Current Row Out of MySql (based on date) [closed]从MySql中检索最新的行(基于日期)[关闭]
【发布时间】:2015-03-13 20:13:07
【问题描述】:

我做错了什么?我正在尝试从数据库中取出最新的行(基于日期)并将其转换为 JSON。但是这个文件只给我[]。

$date=date("Y-m-d",strtotime($_GET['date']));

$myquery = "SELECT * FROM test WHERE week='$date'";
$query = mysql_query($myquery);

if ( ! $myquery ) {
    echo mysql_error();
    die;
}

$data = array();

for ($x = 0; $x < mysql_num_rows($query); $x++) {
    $data[] = mysql_fetch_assoc($query);
}



echo json_encode($data);     

mysql_close();

?>

我的数据如下所示:

#id | week       | firstname | last name | score#

###1  |2015-03-06   | Bill      | Jones     | 25
 ###2  |2015-03-13   | Bill      | Jones     | 45

 ###3  |2015-03-06   | Dave      | Smith     | 32
 ###4  |2015-03-13   | Dave      | Smith     | 52

###5  |2015-03-06   | Mary      | Chu       | 28
 ###6  |2015-03-13   | Mary      | Chu       | 45

因此,对于 2015 年 3 月 13 日,我希望将 Bill、Dave 和 Mary 的数据转换为 JSON。我不想要上周的数据,只想要最新的。

【问题讨论】:

  • 注意 - 你正在检查if ( ! $myquery ) {,但你应该检查if ( ! $query ) {,因为$query是你正在做的mysql_query($myquery)
  • foreach ($query as $row) { $data[$i]['id'] = row['id'] ; $i++} 然后 $out = json_encode($data);假设您的查询正在返回结果。
  • 为什么人们不直接使用 fetchAll php.net/manual/en/pdostatement.fetchall.php ??一次获取一行只会占用 mysql 服务器上的资源。哦,因为您仍在使用 mysql 而不是使用 PDO 编写 PHP4

标签: php mysql sql json


【解决方案1】:

我在你的代码中看到的错误是条件 if(!$myquery),它应该是 if(!$query) 或者你可以这样做:

$query = mysql_query($myquery) or die(mysql_error());

还尝试检查 mysql_fetch_assoc($query) 是否返回任何内容或检查 $date 是否有值。

对于你的循环,我只想分享这个:

你也可以这样做:

 for($data=array();$x=mysql_fetch_assoc($query);$data[]=$x);

=D

【讨论】:

    【解决方案2】:

    不确定这正是您想要的。
    恐怕我显然不明白您到底想从 db 收到什么,这就是为什么我按分数添加订单:

    <?php
    
    $link = mysql_connect('localhost', 'root');
    $db_selected = mysql_select_db('test', $link);
    
    $date = mysql_escape_string('2015-03-13');
    $myquery = "SELECT * FROM mostCurrentRow WHERE week='$date' ORDER BY score DESC";
    $query = mysql_query($myquery);
    if ( ! $myquery ) {
        echo mysql_error();
        die;
    }
    
    $data = array();
    
    while ($row = mysql_fetch_assoc($query)) {
        $data[] = $row;
    }
    
    echo '<pre>';
    var_export($data);
    
    echo json_encode($data);
    
    mysql_close();
    
    /*
    will return:
    array (
      0 => 
      array (
        'id' => '4',
        'week' => '2015-03-13',
        'firstName' => 'Dave',
        'lastName' => 'Smith',
        'score' => '52',
      ),
      1 => 
      array (
        'id' => '2',
        'week' => '2015-03-13',
        'firstName' => 'Bill',
        'lastName' => 'Jones',
        'score' => '45',
      ),
      2 => 
      array (
        'id' => '6',
        'week' => '2015-03-13',
        'firstName' => 'Mary',
        'lastName' => 'Chu',
        'score' => '45',
      ),
    )[{"id":"4","week":"2015-03-13","firstName":"Dave","lastName":"Smith","score":"52"},{"id":"2","week":"2015-03-13","firstName":"Bill","lastName":"Jones","score":"45"},{"id":"6","week":"2015-03-13","firstName":"Mary","lastName":"Chu","score":"45"}]
    */
    

    【讨论】:

      【解决方案3】:

      更改您的查询

      $myquery = "SELECT * FROM test WHERE week = STR_TO_DATE('$date', '%Y-%m-%d %H:%i:%s')"; 
      

      【讨论】:

        【解决方案4】:

        您的查询在查询文本中包含 $date,而不是连接到其中。它应该看起来更像这样:

        $myquery = "SELECT * FROM test WHERE week='".$date."' ORDER BY id";
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        相关资源
        最近更新 更多