1

私は自分のウェブサイトの広告を受け入れるようにウェブサイトをデザインしています。私のウェブサイトは有効な広告(確認済みでクレジットが残っている広告)のリストを取得し、それらを表示します。私の広告テーブルには、広告を検証する次のフィールドがあります。

  • TotalDaysToShowint'広告が表示される合計日数
  • StartDate datetime
  • 検証済みビット
  • LastShowed日時

たとえば、次のようなクエリを使用して、4つの広告を表示したいと思います。

SELECT TOP 4 ImageId,
             Url
FROM   ads
WHERE  verified = 1 AND .......... 
ORDER  BY LastShowed ASC

ここでの問題は、TotalDaysToShowがすべての広告で同じである場合、単純に次のように使用できることです。

declare @d= dateadd(day, @TotalDaysToShow, starttime)そしてそれを次のように使用します:

SELECT TOP 4 ImageId,
             Url
FROM   ads
WHERE  verified = 1
       AND @d > Getdate()
ORDER  BY LastShowed ASC

それらのそれぞれについてそれを計算することは可能ですか?

SELECT TOP 4 ImageId,
             Url
FROM   ads
WHERE  verified = 1
       AND Dateadd(day, TotalDaysToShow, startdate) > Getdate()
ORDER  BY LastShowed ASC

前もって感謝します

4

1 に答える 1

1

はい。ただし、このSQL句の方が効率的だと思います。

AND startdate BETWEEN Dateadd(day, -TotalDaysToShow, getdate()) AND getdate() 

テーブルフィールドを2つの定数と比較するためです。

于 2013-03-18T09:59:24.870 に答える