ندااحمدی
شنبه 29 مرداد 1390, 20:57 عصر
stored procedure ای میخواهم که مثلا دو جدول گالری و عکس را بایکدیگر join کند و داده های جدول عکس را رندوم بیاورد
یوسف زالی
شنبه 29 مرداد 1390, 21:37 عصر
سلام.
بهترین کار اینه که شماره ردیف قرار بدی در select و از اون ردیفی رو بیاری که مثلا شماره اش این باشه:
cast(rand()*COUNT(1) as decimal) -- test
این روال کاره.
کدش رو بنویسید اگر مشکلی بود بگید کچا
ندااحمدی
چهارشنبه 02 شهریور 1390, 14:59 عصر
مشکل من این است که داده خالی هم فرستاده میشود
لطفا راهنمایی کنید
یوسف زالی
شنبه 05 شهریور 1390, 02:01 صبح
به نظر نمیرسه خالی هم بفرسته.
کدتون رو قرار بدید لطفا تا بررسی کنم
ندااحمدی
شنبه 05 شهریور 1390, 09:03 صبح
USE [lianaDb]
GO
/****** Object: StoredProcedure [dbo].[Galleries_GetItemByCategoryAndLangOrIDRandom] Script Date: 08/27/2011 09:15:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Galleries_GetItemByCategoryAndLangOrIDRandom]
@CategoryID int = -1,
@lang_Id int = -1,
@AbsoluteID int = -1,
@RecordCount int = 1
AS
Begin
Declare @Rand float;
Set @Rand = RAND();
Select top(@RecordCount)* From
(
Select
mn.*,
c.Category_Title,
l.lang_title,
mnf.Picture_Id,
mnf.Picture_Title,
mnf.Picture_Description,
mnf.Picture_Files_Url
From
tbl_Galleries mn
Inner Join
tbl_Categories c
On
c.Category_Id = mn.Category_Id
Inner Join
tbl_lang l
On
l.lang_Id = mn.lang_Id
Left Join
tbl_Pictures mnf
On
mnf.Gallery_Id= mn.Gallery_Id And mnf.Pictures_isDeleted<> 1
Where
(mn.Gallery_Id = @AbsoluteID Or @AbsoluteID = -1)
And
(l.lang_Id = @lang_Id Or @lang_Id= -1)
And
(c.Category_Id = @CategoryID Or @CategoryID = -1)
And
mn.Galleries_isDeleted<>1
) mn
Where Picture_Id <= Cast(((Select Max(Picture_Id) from (
Select
mn.*,
c.Category_Title,
l.lang_title,
mnf.Picture_Id,
mnf.Picture_Title,
mnf.Picture_Description
From
tbl_Galleries mn
Inner Join
tbl_Categories c
On
c.Category_Id = mn.Category_Id
Inner Join
tbl_lang l
On
l.lang_Id = mn.lang_Id
Left Join
tbl_Pictures mnf
On
mnf.Gallery_Id= mn.Gallery_Id And mnf.Pictures_isDeleted<> 1
Where
(mn.Gallery_Id = @AbsoluteID Or @AbsoluteID = -1)
And
(l.lang_Id = @lang_Id Or @lang_Id= -1)
And
(c.Category_Id = @CategoryID Or @CategoryID = -1)
And
mn.Galleries_isDeleted<>1
)ml
) * @Rand) as int) + 1
And
Picture_Id >= Cast(((Select Max(Picture_Id) from (
Select
mn.*,
c.Category_Title,
l.lang_title,
mnf.Picture_Id,
mnf.Picture_Title,
mnf.Picture_Description
From
tbl_Galleries mn
Inner Join
tbl_Categories c
On
c.Category_Id = mn.Category_Id
Inner Join
tbl_lang l
On
l.lang_Id = mn.lang_Id
Left Join
tbl_Pictures mnf
On
mnf.Gallery_Id= mn.Gallery_Id And mnf.Pictures_isDeleted<> 1
Where
(mn.Gallery_Id = @AbsoluteID Or @AbsoluteID = -1)
And
(l.lang_Id = @lang_Id Or @lang_Id= -1)
And
(c.Category_Id = @CategoryID Or @CategoryID = -1)
And
mn.Galleries_isDeleted<>1
)ml
) * @Rand) as int) - (@RecordCount)
Order By mn.Picture_Id Desc
End
زمانی که به جای category id منهای یک قرار می دهم که همه بیاورد درست کار میکند ولی وقتی میخواهم براساس category id به خصوصی مثلا با categry id ای که 20 یا 21 است به من جواب دهد امکان این که دادهای هم ندارد را میدهد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.