从MySql中检索最新的行(基于日期)

时间:2015-03-13 20:13:07

标签: php mysql sql json

我做错了什么?我试图从数据库中取出最新的行(基于日期)并将其转换为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();

&GT;

我的数据如下:

#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。我不想要上周的数据,只需要最新的数据。

4 个答案:

答案 0 :(得分:2)

我在你的代码中看到的错误是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

答案 1 :(得分:0)

不确定这正是你想要的。
我担心我显然不明白你想从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"}]
*/

答案 2 :(得分:-1)

更改您的查询

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

答案 3 :(得分:-1)

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

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