2015-03-13 40 views
1

我在做什麼錯?我試圖從數據庫中取出最新的行(基於日期)並將其轉換爲JSON。但是這個文件只是給我[]。 ?從MySql中獲取最多當前行(基於日期)

$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日我想比爾,Dave和Mary的數據變成JSON。我不想要上週的數據,只是最新的數據。

+0

音符 - 你所檢查的'如果(!$更改爲MyQuery){ ',但你應該檢查'if(!$ query){'as'$ query'是你在做的事情'mysql_query($ myquery)' – Sean 2015-03-13 20:17:18

+0

foreach($ query as $ row){$ data [$ i] [ 'id'] =行['id']; $ i ++}然後$ out = json_encode($ data);假設您的查詢正在返回結果。 – kayra 2015-03-13 20:20:19

+0

爲什麼人們不使用fetchAll http://php.net/manual/en/pdostatement.fetchall.php?一次抓取一行只是綁定你的MySQL服務器上的資源。 OH,因爲你仍然使用mysql編碼PHP4而不是使用PDO – 2015-03-13 20:22:40

回答

0

不知道這正是你想要的。
我怕我不瞭解清楚你到底想從數據庫得到什麼,這就是爲什麼我按分數順序添加:

<?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"}] 
*/ 
-1

改變您的查詢

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

您查詢具有查詢文本,而不是串連到這裏面$日期。它應該看起來更像是這樣的:

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

[「雙引號字符串最重要的特性是變量名稱將被擴展。」](http://php.net/manual/en /language.types.string.php#language.types.string.syntax.double)&& ['當用雙引號或heredoc指定字符串時,變量將在其中被解析。](http://php.net) /manual/en/language.types.string.php#language.types.string.parsing) – Sean 2015-03-13 20:38:44

+0

另外,OP希望'因此2015年3月13日我想Bill,Dave和Mary的數據',所以'LIMIT 1'會只返回「Bill」,而不是「Dave」或「Mary」。 – Sean 2015-03-13 20:40:49

+0

這是一個好點,我沒有想到這一點。這就是我一直寫的PHP查詢。 此外,我錯過了最後一行。我的錯。 – 2015-03-13 20:46:00

2

錯誤的事情,我可以在你的代碼中看到的是條件,如果(!$更改爲MyQuery),它應該是如果($查詢!),或者你可以像下面這樣做:

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

還嘗試檢查mysql_fetch_assoc($ query)是否正在返回任何內容或檢查$ date是否具有值。

您的循環,我只是想分享這個:

你也可以做這樣的:

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

= d