2011-09-06 71 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