مشاهده نسخه کامل
: شمارش تعداد سطرهای جدول تا جایی که دستور where محقق شود
قله بلند
24-12-2008, 03:46
با سلام
فرض کنید من جدولی دارم که دارای دو ستون است.
می خواهم تعداد سطرهایی از جدول را به دست آورم که منطبق بر نظر کاربر است.
با دستور TOP n باید مشخص کرد که دقیقاً چند سطر برای بازیابی مورد نظر است ولی در مورد سوال من این عدد معلوم نیست.
کاربر دو ورودی وارد می کند.
دستور select :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا می خواهم تعداد سطرهایی که شمره می شوند را به دست آورم.
دستور count همه سطرها را می شمارد ولی من می خواهم تا جایی شمرده شود که شرط
WHERE
محقق شود.
قله بلند
24-12-2008, 12:23
سلام
یک توضیح برای روشن تر شدن بحث
وقتی من از دستور زیر استفاده می کنم، تعداد سطرهایی را که در شرط صادق است را بر می گرداند
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی منظور من این نیست.
فرض کنید که جدولی 50 سطر دارد و رکورد مورد نظر کاربر در سطر 20 قرار دارد. حالا می خواهم دقیقاً به این عدد 20 برسم
shalineh
24-12-2008, 16:49
قسمت Bold شده رو به کوئری اضافه کن.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
قله بلند
24-12-2008, 20:40
سلام
من این دستور را هم امتحان کردم ولی تعداد سطرهای تاثیر گرفته از شرط where را باز می گرداند. مثلاً 5 سطر در این شرط صدق می کند.
فرض کنید که رکورد مورد نظر کاربر در سطر بیستم است. یعنی اگر از ابتدای جدول نقطه شروع را فرض کنیم، در سطر بیستم جدول رکورد مورد نظر کاربر پیدا می شود. من این عدد 20 را می خواهم نه تعداد سطرهایی که در شرط where صدق می کنند.
Rowcount @@ هم نتیجه ای را بر می گرداند که count بر می گرداند. در صورتی که این جواب مد نظر من نیست
قله بلند
25-12-2008, 02:39
اگر راه حلی نداره لطفً من رو هم مطلع کنید
قله بلند
25-12-2008, 13:07
سلام
پس چگونه دستور select
rowcount را می شمرد تا به رکوردی برسد که کاربر آن را انتخاب کرده است؟
سوال عجیبی پرسیدم؟
سلام
سوال عجیبی پرسیدم؟
متاسفانه درست نمیتوانید منظورتان را منتقل کنید ولی حالا گمانم از جمله زیر متوجه شدم چه میخواهید!
فرض کنید که رکورد مورد نظر کاربر در سطر بیستم است. یعنی اگر از ابتدای جدول نقطه شروع را فرض کنیم، در سطر بیستم جدول رکورد مورد نظر کاربر پیدا می شود. من این عدد 20 را می خواهم نه تعداد سطرهایی که در شرط where صدق می کنند.
از دستور زیر استفاده کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته استفاده از این عدد چندان صحیح نیست.
چون در یک بانک واقعی در شبکه در همان لحظه انتخاب شما شاید فرمان های متعدد دیگر Insert و Delete در جریان باشند که عملاً ترتیب سطرها را عوض کنند و برنامه شما کار اشتباهی انجام دهد.
کلاً در برنامه شبکه ای اصلاً نباید از این عدد شماره سطر استفاده خاص کنترلری کرد.
موفق باشید.
قله بلند
27-12-2008, 02:27
سلام
متاسفانه درست نمیتوانید منظورتان را منتقل کنید ولی حالا گمانم از جمله زیر متوجه شدم چه میخواهید!
<
اگر حس می شود که سوال جای توضیح بیشتری دارد به من بگویید تا بیشتر توضیح دهم.
البته استفاده از این عدد چندان صحیح نیست.
چون در یک بانک واقعی در شبکه در همان لحظه انتخاب شما شاید فرمان های متعدد دیگر insert و delete در جریان باشند که عملاً ترتیب سطرها را عوض کنند و برنامه شما کار اشتباهی انجام دهد.
کلاً در برنامه شبکه ای اصلاً نباید از این عدد شماره سطر استفاده خاص کنترلری کرد.
من از شبکه استفاده نمی کنم.
پس اصولاً نباید در شبکه چنین سوالی مطرح شود که دقیقا فوکوس برود روی سطری که تازه درج شده یا تازه ویرایش شده؟ یا اینکه باید فوکوس برود روی سطری که تازه درج شده یا تازه ویرایش شده ولی با این روش نمی شود؟
کدامیک از دو سوال بالا جوابش آری است؟
در ضمن از sql2000 استفاده می کنم. کد را امتحان می کنم، انشاء الله روی 2000 هم جواب دهد.ممنون
قله بلند
27-12-2008, 15:41
سلام
دستور ROW_NUMBER() در SQL2000 وجود ندارد.
اما یک دستور جالب برای SQL2000 پیدا کردم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که جوابش می شود:
در این جستجو یک عدد TerritoryID و پنج عدد EmployeeID یافت شد.
سلام
پس اصولاً نباید در شبکه چنین سوالی مطرح شود که دقیقا فوکوس برود روی سطری که تازه درج شده یا تازه ویرایش شده؟ یا اینکه باید فوکوس برود روی سطری که تازه درج شده یا تازه ویرایش شده ولی با این روش نمی شود؟
من احساس میکنم که شما این سوال را پرسیدید تا مشکلتان در تاپیک زیر حل شود؟؟؟
forum.p30world.com/showthread.php?t=282612
اگر اینطور است، این راهش نیست.
شما باید ایندکس آیتم را در خود گراید پیدا کنید، اصلاً شاید کاربر دستی روی سرستونهای گراید کلیک کند و sort را تغییر دهد در این صورت ایندکس گراید با بانک یکی نخواهد بود.
یا اصلاً شاید گراید فقط شامل تعداد خاصی از سطرهای بانک باشد که باز ایندکس گراید با بانک فرق خواهد کرد.
اینکس گراید باید از dataset خودش پیدا شود، و معمولاً نیازی هم به حلقه for نخواهد بود.
اگر مشکل شما همان مشکل تاپیک قبلی است، پیشنهاد میکنم جواب و بحث را در همان تاپیک ادامه دهیم.
در ضمن از sql2000 استفاده می کنم. کد را امتحان می کنم
چرا؟؟؟
احساس نمیکنید که برای سال 2009 (سه روز دیگر) استفاده از نسخه 2000 یک کم زیادی زنگ زده و فسیل مانند است؟
شما ویندوز XP و Vista را ترجیح میدهید یا ملنیوم؟
سلام
پس اصولاً نباید در شبکه چنین سوالی مطرح شود که دقیقا فوکوس برود روی سطری که تازه درج شده یا تازه ویرایش شده؟ یا اینکه باید فوکوس برود روی سطری که تازه درج شده یا تازه ویرایش شده ولی با این روش نمی شود؟
من احساس میکنم که شما این سوال را پرسیدید تا مشکلتان در تاپیک زیر حل شود؟؟؟
forum.p30world.com/showthread.php?t=282612
اگر اینطور است، این راهش نیست.
شما باید ایندکس آیتم را در خود گراید پیدا کنید، اصلاً شاید کاربر دستی روی سرستونهای گراید کلیک کند و sort را تغییر دهد در این صورت ایندکس گراید با بانک یکی نخواهد بود.
یا اصلاً شاید گراید فقط شامل تعداد خاصی از سطرهای بانک باشد که باز ایندکس گراید با بانک فرق خواهد کرد.
اینکس گراید باید از dataset خودش پیدا شود، و معمولاً نیازی هم به حلقه for نخواهد بود.
اگر مشکل شما همان مشکل تاپیک قبلی است، پیشنهاد میکنم جواب و بحث را در همان تاپیک ادامه دهیم.
در ضمن از sql2000 استفاده می کنم. کد را امتحان می کنم
چرا؟؟؟
احساس نمیکنید که برای سال 2009 (سه روز دیگر) استفاده از نسخه 2000 یک کم زیادی زنگ زده و فسیل مانند است؟
شما ویندوز XP و Vista را ترجیح میدهید یا ملنیوم؟
قله بلند
28-12-2008, 02:22
با سلام
لطف کنید و مطلب موجود درآدرس
forum.p30world.com/showthread.php?t=282612
را ادامه دهید.
ممنون
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.