2013-08-06 26 views
-1

所以我有一個主要查詢選擇今天的記錄。如果今天的記錄小於3,則執行另一個查詢。這是我當前如何做:如果返回的記錄小於x做另一個查詢效率

<?php 
//Select today's records 
$select = mysql_query("SELECT * FROM item_info 
WHERE item_info.content_time 
BETWEEN UNIX_TIMESTAMP(CURDATE()) 
AND UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 
DAY) 
ORDER BY item_info.item_id DESC 
LIMIT 9 "); 

//If today's records are less than 3, select the ones from yesterday 
if(mysql_num_rows($select) < 3){ 
    $select = mysql_query("SELECT * FROM item_info 
WHERE item_info.content_time 
BETWEEN UNIX_TIMESTAMP(CURDATE() + INTERVAL -1 
DAY) 
AND UNIX_TIMESTAMP(CURDATE()) 
ORDER BY item_info.item_id DESC 
LIMIT 9 "); 
    } 

//Fetch $select 
?> 

我的主要問題是:
這-Is正確使用mysql_num_rows的?
- 還有其他方法可以做到這一點嗎?
通常每天會有超過3條記錄,所以子查詢只是爲了以防萬一。

+3

除了使用不推薦使用的MySQL擴展外,邏輯對我來說看起來很合理。我不知道爲什麼'$ select'變成了'$ select_book_info_rec'。 – ironcito

回答

0

是的還有另一種方式來做到這一點。運行您的查詢以始終從昨天和今天選擇前9條記錄。修改您的訂單條款,使其看起來像這樣:

order by item_info.content_time desc, item_info.item_id desc 

這樣您不需要檢查返回的記錄數。

但是,這是略有不同的邏輯。如果今天的記錄數量在3到9之間,它會給出與目前不同的答案。如果這樣不行,請保留你的記錄。

順便說一下,您應該驗證您當前的代碼是否符合您的要求。目前,如果您從今天獲得1或2條記錄,則會忽略它們並使用昨天的數據。這可能不是你想到的。

+0

是的,它會產生不同的輸出,我想我會保留我的,謝謝。順便說一句,我認爲downvote是因爲使用mysql ... – Aaron

相關問題