2013-10-26 28 views
1

在這裏我已經爲此寫了查詢。查詢是正確的,但不知道爲什麼它不回顯任何東西:獲取前5行的內容並回顯它們

$sql3= mysqli_query($con,"select post from facebook_posts where p_id > (select MAX(p_id) - 5 from facebook_posts);"); 
while ($row = @mysql_fetch_array($sql3)) 
{ 
    echo $row['post']; 
    echo '<br/>'; 

} 

表已經有數據。當我在mysql中測試查詢時,它給出了5行內容;

+0

考慮使用* ORDER BY *和* LIMIT *來避免嵌套的select查詢。 SELECT post from facebook_posts ORDER BY p_id DESC LIMIT 0,5 – Capricorn

+1

@Capricorn觀看細節facebook_posts聽起來像一張大桌子.. Karimkhan使用的子查詢將在大型桌子上縮放得更好..請參閱http://sqlfiddle.com /#!2/06807/1 ...看起來像排序需要最長的時間..但優化子查詢需要更長的時間,所以你的查詢會更好在較小的數據集與子查詢..也子觸發範圍掃描什麼是更好的與一個完整的表格掃描ORDER BY .. DESC會觸發什麼,並且filesort對於大量記錄是非常棘手的。 –

+1

@Karimkhan +1使用子查詢查看我的最後評論摩羯座的解釋 –

回答

1

您在混合mysqli_*mysql_*函數。當您使用mysqli_query執行查詢時,mysql_fetch_array函數無法獲取任何結果。您不應該再使用mysql_*函數,因爲它們已被棄用。另外,如果你想在MySQL中限制你的結果,你可以使用LIMIT條款,而不是計算最大/最小的id。

如果您將代碼更改爲以下內容,它應該可以工作。

$result = mysqli_query($con,"select post from facebook_posts where p_id > (select MAX(p_id) - 5 from facebook_posts)"); 
while ($row = $result->fetch_array(MYSQLI_ASSOC)) 
{ 
    echo $row['post']; 
    echo '<br/>'; 
} 

有關使用mysqli獲取結果的更多信息,可以看看here

+0

請問你能改正嗎? – user123

2

首先您使用mysqli庫進行查詢,然後嘗試使用mysql來獲取一行。

mysqlmysqli是不同的庫。你應該只使用其中的一個。由於mysql已棄用,因此您應該使用這兩者中的mysqli

+0

請你正確 – user123

+1

好的。得到它了 – user123

相關問題