ندااحمدی
شنبه 29 مرداد 1390, 21:57 عصر
stored procedure ای میخواهم که مثلا دو جدول گالری و عکس را بایکدیگر join کند و داده های جدول عکس را رندوم بیاورد
یوسف زالی
شنبه 29 مرداد 1390, 22:37 عصر
سلام.
بهترین کار اینه که شماره ردیف قرار بدی در select و از اون ردیفی رو بیاری که مثلا شماره اش این باشه:
cast(rand()*COUNT(1) as decimal) -- test 
این روال کاره.
کدش رو بنویسید اگر مشکلی بود بگید کچا
ندااحمدی
چهارشنبه 02 شهریور 1390, 15:59 عصر
مشکل من این است که داده خالی هم فرستاده میشود
لطفا راهنمایی کنید
یوسف زالی
شنبه 05 شهریور 1390, 03:01 صبح
به نظر نمیرسه خالی هم بفرسته.
کدتون رو قرار بدید لطفا تا بررسی کنم
ندااحمدی
شنبه 05 شهریور 1390, 10: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.