View Full Version : انتخاب 10 تا 10 رکوردها
rezabehboodi0098
جمعه 16 خرداد 1393, 18:43 عصر
با سلام
دوستان من میخاستم یه کوری بنویسم که اخبارم از زریق اون انتخاب کنم و میخام این اخبار 10 تا 10 انتخاب بشه یعنی اگه 30 تا خبر داشته باشم خبر 1 تا 10 رو با هم و خبر 11 تا 20 با هم
نمایش بده مشکل دستور زیر اینه که در صفحه ی دوم 20 اخبار و در صفحه ی سوم 30 خبر را میاره ولی من میخام تو هر صفحه فقط 10 خبر نمایش داداه بشه
SELECT TOP 20 * FROM newstable
لطفا یه راهنمایی بکنید
kohyar
جمعه 16 خرداد 1393, 18:55 عصر
شما باید از دو دستور Select top 10 * و پارامتر @startindex استفاده کنی. startindex همون رکورد شروع هستش که شما باید در هر بار پرس و جو به StoreProcedure اضافه کنی
@startindex int
select Top 10 * from tblnews where @startindex>[ID]
rezabehboodi0098
جمعه 16 خرداد 1393, 19:02 عصر
دوست عزیز من از
StoreProcedure استفاده نمیکنم میه یه روش دیگه بگی؟
kohyar
جمعه 16 خرداد 1393, 19:05 عصر
عزیزم هیچ فرقی نداره خوب به همین روش کد رو تو فرم های خودت به اس کیو ال ارسال کن
rezabehboodi0098
جمعه 16 خرداد 1393, 19:15 عصر
دوست عزیز خیلی ببخشید
اگه میشه یه کوری بنویسی که من الان اونو تو sql اجرا کنم و رکورد بین 10 و 20 رو بهم بده
عذر میخام دوست عزیز من مبتدی هستم
ahmad156
جمعه 16 خرداد 1393, 19:23 عصر
اگه SQL ات 2005 تا 2008 هست از این روش (http://devexir.com/index.php/articlaes/mysql-articles/93-databases/mysql/mysql-articles/115-limit-sql-server) استفاده کن و اگر 2012 یا 2014 هست این روش (http://technet.microsoft.com/en-us/library/gg699618%28v=sql.110%29.aspx) رو استفاده کنه
rezabehboodi0098
جمعه 16 خرداد 1393, 19:23 عصر
کوهیار جان به دادم برس
gjmkdyttyhujk
شنبه 17 خرداد 1393, 00:30 صبح
شما یک فیلد ردیف به جدولت اضافه کن و اون رو از نوع identity تعریف کن، و increment اون رو 1 قرار بده که هر بار یک خبری رو اضافه میکنی یکی به این فیلد اضافه بشه. بعد یک دستور select مینویسی به اینصورت
select * from AkhbarTable where RADIF is between(10,20)
دقیقا سینتکسش یادم نیست ولی اگه اشتباه بود فکر کنم is رو باید حذف کنی.
mRizvandi
شنبه 17 خرداد 1393, 00:43 صبح
از این روش هم می تونی استفاده کنی:
ابتدا یک اس کیو ال، شماره ردیف رکورد رو محاسبه می کنه، سپس اس کیو ال دوم شرط شروع و پایان اندیس ردیف رو بررسی و رکوردها رو برمیگردونه.
SELECT * FROM
(
SELECT Fieldnames, ROW_NUMBER() OVER (ORDER BY ID) AS RowNo
FROM tblName
[WHERE Conditions]
) AS SortedData
WHERE SortedData.RowNo BETWEEN (StartIndex AND EndIndex)
meysam99
شنبه 17 خرداد 1393, 11:44 صبح
سلام بستگی داره از چه روشی بخوای این کار رو انجام بدی
اگه میخوای خیلی سریع این کد را بنویسی. می توانی بر روی همه یک کوئری بنویسی بعد به گرید یا لیست که استفاده می کنی تعداد بدهی تا هر صفحه را به همان تعداد نشان بدهد و تنظیم خواصی نمی خواهد.
یک راه دیگه وقتی با ef کار می کنی این است که با دستوارات لینک skip و take این کار رو انجام بدهی. و روش دیگه هم که دوستان در بالا گفتن استفاده مستقیم از sql است.
می تونی top 10 رو انتخاب کنی و بعد از اون یک select دیگه بنویسی که در اون تعداد انتخاب های قبلی رو حذف کنی
مثل این حالت
select top 10 * from tbl where is not in select top 10 id
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.