2011-09-06 44 views
0

我有一個SQL數據庫。在這裏表稱爲Reports和它看起來像這樣嵌入式SQL請求

ID  Date   Year  Title   Links 
1  2010-05-03  2010  Report 1   link1.php 
2  2010-09-03  2010  Report 2   link2.php 
3  2011-01-05  2011  Report 3   link3.php 

我試圖去實現它了這一點。我想選擇2010 - 2011年的所有報告,但2010年的報告可能僅限於9月份的報告。

現在,我已經有了一個SQL語句選擇兩年

$sql = "SELECT * FROM Reports WHERE Year = ".$db->escape($jaar1)." OR jaar = ".$db->escape($jaar2); 

如何選擇Report 2和(因爲它從2010年9月完成日期)(因爲它從2011年日期的所有報告)?

回答

1

我看到它最簡單的方法,就是使用BETWEEN...AND操作。

SELECT * 
FROM `Reports` 
WHERE `Date` BETWEEN '2010-09-01' AND NOW() 

請注意反引號。尤其重要的是Date,因爲它是一個保留字。

+0

這是一個正確的請求? '$ sql =「SELECT * FROM WHERE'Date'BETWEEN'」。$ db-> escape($ jaar2)。「 - 09-01'AND'」。$ db-> escape($ jaar1)。「 - 08 -31'「;' – Michiel

+0

明白了,這是最簡單的解決方案。謝謝 – Michiel

0

一般模式

where year = 2011 
or (year = 2010 and month = 'September') 
1

假設Date列是DATE類型:

SELECT * 
    FROM `Reports` 
WHERE (YEAR(`Date`) = 2010 AND MONTH(`Date`) = 9) 
     OR YEAR(`Date`) = 2011 
+0

'Date'確實是'DATE'類型的。你還提到'年'。這是我的'YEAR'列的引用的SQL語句的一部分嗎? – Michiel

+1

不,這是MySQL'YEAR()'函數,它從日期中提取年份部分。似乎與我的「年份」專欄一樣,但您可能希望將其替換爲「年份」專欄。我不知道你有什麼不同。 – deceze

+0

好吧,據我所知,它的工作原理:)儘管如此,十月(10),十一月(11)或十二月(12)提交的報告也會被要求嗎?或者如何從第9個月選擇每個報告? – Michiel