按YES或NO排序

时间:2012-07-06 11:50:35

标签: php mysql sql

我搜索了包含日期的文章。在MySQL中是:

Article:
id | title
1  | first
2  | second
3  | third
4  | fourth

DatesArticle:

id | article_id | from       | to
1  |     1      | 10-10-2010 | 11-11-2010
2  |     2      | 11-10-2010 | 12-12-2010
3  |     1      | 13-12-2010 | 12-01-2012
4  |     3      | 11-11-2012 | 12-12-2012
5  |     4      | 02-02-2013 | 02-02-2014

我希望获得所有文章的日期,并按可用性对其进行排序。

例如我想通过日期从2011年12月10日到2012年12月1日期间获得所有文章和排序

这应该归还我:

  1. 首先(在范围FROM TO - DatesArticle.id = 3)
  2. 第三名(范围FROM TO - DatesArticle.id = 4)
  3. 秒(不在FROM TO范围内)
  4. 第四名(不在范围内)至
  5. 这可能是SQL或SQL和PHP吗?如果是,怎么样?

3 个答案:

答案 0 :(得分:3)

使用CASE子句,如:

SELECT * FROM DatesArticle
ORDER BY CASE 
WHEN id=3 AND CURRENT_DATE()<=from and to < CURRENT_DATE()>=to THEN 1
WHEN <condition_2> THEN 2
etc...
ELSE <any other condition>
END

不是说上面的内容会起作用,但它会给你和想法。如果您添加了您尝试过的查询示例或者如何构建where子句,那么这将有助于更好地回答。

答案 1 :(得分:1)

我的想法是当它的id = 3赋值1时,如果id = 4赋值2,任何其他值赋值3,之后按照你指定的数字制作where条件和顺序。

试试这个:

select *,  
      case when t1.id=3 then 1 when t1.id=4 then 2 else 3 end as t
from article as t1 
join DatesArticle as t2 
on t1.id=t2.id
where CURRENT_DATE()<=from 
and to < CURRENT_DATE()
order by t

答案 2 :(得分:1)

您必须先加入表格才能访问文章的数据。

然后按顺序排序(如果在给定范围内有日期)。

SELECT title
FROM Article JOIN DatesArticle
  ON (Article.id = DatesArticle.id)
  ORDER BY DatesArticle.from > LastDate AND DatesArticle.to < FirstDate DESC;

(我从未在逻辑分类中获得ASC和DESC - 尝试看看会发生什么)

相关问题