3

日付のある記事を検索しています。MySQL では次のとおりです。

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

日付記事:

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

日付付きのすべての記事を取得し、これを在庫順に並べ替えたいと思います。

たとえば、すべての記事を取得し、日付でこれを並べ替えます FROM 12-10-2011 TO 12-01-2012

これは私を返すはずです:

  1. 最初 (FROM TO - DatesArticle.id = 3 の範囲内)
  2. 3 番目 (FROM TO - DatesArticle.id = 4 の範囲内)
  3. 秒 (FROM TO の範囲外)
  4. 4 番目 (FROM TO の範囲内にありません)

これは SQL または SQL と PHP で可能ですか? はいの場合、どのように?

4

3 に答える 3

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句をどのように構築しているかを追加すると、より良い回答に役立ちます。

于 2012-07-06T11:59:27.103 に答える
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
于 2012-07-06T12:29:28.150 に答える
1

記事のデータにアクセスするには、最初にテーブルを結合する必要があります。

次に、論理条件 (指定された範囲内に日付がある場合) で ORDER します。

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

(論理的な並べ替えで ASC と DESC を正しく取得することはできません。何が起こるか試してみてください)

于 2012-07-06T12:46:48.823 に答える