次の行のテーブルがあります。
tblPictures
- picID
- picName
- galleryID
- アクティブです
クエリを実行して、たとえばgalleryID=3
、isActive=1
isActive行が1であるこの選択に画像がない場合(つまり、クエリは結果を返しません)、最初の画像isActive=1
をgalleryID=3
誰かがこれについて私を導くことができますか?
次の行のテーブルがあります。
tblPictures
クエリを実行して、たとえばgalleryID=3
、isActive=1
isActive行が1であるこの選択に画像がない場合(つまり、クエリは結果を返しません)、最初の画像isActive=1
をgalleryID=3
誰かがこれについて私を導くことができますか?
どうぞ。基本的に、そのセットにアクティブレコードがあるかどうかを確認し、ない場合は、最初のレコード(picIDによって決定される)を更新します。必要に応じて、ストアドプロシージャまたは関数に貼り付けることも、スクリプトを実行してギャラリーIDを手動で変更することもできます。
DECLARE @Count INT,
@GalleryID INT
SET @GalleryID = 3
SELECT @Count = COUNT(*)
FROM tblPictures
WHERE galleryID=@GalleryID and isActive=1
IF @Count = 0
BEGIN
UPDATE tblPictures
SET isActive = 1
WHERE picID = (
SELECT TOP 1 picID
FROM tblPictures
WHERE galleryID = @GalleryID
ORDER BY picID
)
END
モアコード
これにより、アクティブな画像がないギャラリーの最初の画像(picIDによる)が更新されます。
UPDATE tblPictures
SET isActive = 1
WHERE picID IN (
SELECT picID
FROM (
SELECT galleryID, MIN(picID) AS 'picID'
FROM tblPictures AS p
JOIN (
SELECT galleryID
FROM tblPictures
WHERE isActive = 1
) AS s ON p.galleryID <> s.galleryID
GROUP BY galleryID
)
)
最も内側のサブクエリは、アクティブな画像があるギャラリーを検索します。次のステップでは、写真のあるものを除くgalleryIDを見つけます。次に、各galleryIDの最小のpicIDを見つけ、それらを使用してテーブルを更新します。
これを試して:
declare @tav table
(
gallaryid int,
isactive int
)
insert into @tav
select
3,0 union all
select
4,0 union all
select
5,1
select * from @tav
update @tav set isactive=1
where gallaryid=3 and isactive=(select top(1)isactive from @tav order by isactive)
select * from @tav
where gallaryid=3 and isactive=1