0

プロジェクトを含むテーブルがあります:

  • id (整数)
  • 順序付け (整数)
  • コンテンツ (文字列)

私のプロジェクト ページには、現在のプロジェクトと次の 3 つのプロジェクトのプレビューが表示されます。次の 3 つのプロジェクトを取得するために、クリーンな MySQL クエリを使用したいと思います。もちろん、その人が最後のプロジェクトの 1 つに参加している場合、表示するプロジェクトがあと 3 つ残っているわけではありません。

そのため、最初のものをもう一度表示する必要があります。

基本的に、これら2つのステートメントを組み合わせようとしています:

SELECT *
FROM projects
WHERE ordering > {currentProjectOrdering}
ORDER BY ordering ASC

SELECT *
FROM projects
WHERE ordering > 0
ORDER BY ordering ASC

そしてまた

LIMIT 0,3

簡単に言えば、現在のプロジェクトよりも順序が高い次の 3 つのレコードを取得します。これらの (一部の) レコードが存在しない場合は、順序 = 1 から開始します。

10 個のプロジェクトがあると仮定します。プロジェクト 1 は 2、3 および 4 を示します プロジェクト 2 は 3、4 および 5 を示します ... プロジェクト 9 は 10、1 および 2 を示します

4

3 に答える 3

2

最初の条件と2番目の条件のデータが必要な場合

SELECT *
FROM projects
WHERE ordering > {currentProjectOrdering} AND ordering > 0
ORDER BY ordering ASC
LIMIT 0,3

最初の条件または2番目の条件のデータが必要な場合

SELECT *
FROM projects
WHERE ordering > {currentProjectOrdering} OR ordering > 0
ORDER BY ordering ASC
LIMIT 0,3
于 2012-06-19T16:31:52.837 に答える
0

私はこれについて興味があります。私は mysql を持っていないのでテストできませんが、これらの例で必要な 3 つのレコードを取得できるとは思いません。始まり。私は で遊んでいTSQLます - だから はありませLIMITTOP

また、誰かがもっとうまくできるかどうかも知りたいです。

SELECT  TOP 3 
    CASE
    WHEN ORDERING >= {currentProjectOrdering} THEN ORDERING
    ELSE {currentProjectOrdering} - ORDERING END AS DISPLAYORDER,*
FROM SO_projects  
WHERE (ordering >= {currentProjectOrdering} AND ordering < {currentProjectOrdering}+ 3 ) OR ordering < 3
ORDER BY DISPLAYORDER DESC 

私は MYSQL について何も知らないので約束できませんが、ここに私の試みがあります。T-SQL ではTOP、ORDER BY に応じて、指定された数の rec (この場合は 3) が返されます。の 0,3 の部分 (私が望む) の 0 に同義語はありませんLIMIT。私はグーグルで検索しましたが、CASE内容はかなり似ているはずです。> と < は、仕組みによっては省略できる場合がありますLIMIT。ロジックは SqlServer で機能します。

SELECT  
    CASE
    WHEN ORDERING >= {currentProjectOrdering} THEN ORDERING
    ELSE {currentProjectOrdering} - ORDERING END AS DISPLAYORDER,*
FROM SO_projects  
WHERE (ordering >= {currentProjectOrdering} AND ordering < {currentProjectOrdering} + 3    ) OR ordering < 3
ORDER BY DISPLAYORDER DESC 
LIMIT 0,3
于 2012-06-19T18:15:27.980 に答える
0

このようなものが機能するはずです(その人が取り組んでいるプロジェクトだけで制限すると仮定します):

     SELECT * FROM projects WHERE person = person_id && (ordering > 0 && COUNT(id) < 4) 
|| (ordering >= currentProjectOrdering && COUNT(id) >= 4)) ORDER BY ordering LIMIT 0,3;
于 2012-06-19T16:39:48.323 に答える