• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

دستورات خاص SQL

MSN_Golden

کاربر تازه وارد
تاریخ عضویت
7 سپتامبر 2004
نوشته‌ها
257
لایک‌ها
3
سلام
من يك دستور SQL ميخوام كه چند ركورد آخر رو Select كنه
حالا تعدادش ديگه از توي دستور تعيين ميشه ديگه
 

emad86_20011

Registered User
تاریخ عضویت
4 فوریه 2004
نوشته‌ها
185
لایک‌ها
2
سن
38
محل سکونت
Mashhad, Iran
من دو راه تو ذهنم هست!!
یکی اینکه رکورد ها به صورت زیاد به کم فراخوانی کنی!! ولی الان یادم نیست دستورش چی بود!!

یکی دیگه اینکه اول تعداد کل رکورد ها رو بگیری ( مثلا میشه n تا)
بعد

کد:
"SELECT * FROM `table` LIMIT ".$n - $K.", ".$n

K تعدادی هست که میخوای از آخر بخونی!!
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
کد:
SELECT TOP N * FROM TableName ORDER BY FieldName DESC

N تعداد رکورد مورد نظر، و DESC هم برای مرتب‌سازی از آخر.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
کد:
SELECT TOP N * FROM TableName ORDER BY FieldName DESC

N تعداد رکورد مورد نظر، و DESC هم برای مرتب‌سازی از آخر.

من دو راه تو ذهنم هست!!
یکی اینکه رکورد ها به صورت زیاد به کم فراخوانی کنی!! ولی الان یادم نیست دستورش چی بود!!

یکی دیگه اینکه اول تعداد کل رکورد ها رو بگیری ( مثلا میشه n تا)
بعد

کد:
"SELECT * FROM `table` LIMIT ".$n - $K.", ".$n

K تعدادی هست که میخوای از آخر بخونی!!

سلام
خوب هستيد
پرهام جان فكر كنم منظورشون اينكه اخرين ركود ست هاي وارد شده باشد.
مثلا فرض كنيم فليد اسم را با آرش پر كند انوقت اگر از اين دستور شما استفاده كند جواب درست نميگرد . چون اخرين اطلاعات شامل فيلد نيم ارش است( با فرض مرتب كردن بر اساس فيلد اسم ) اما جواب گو نيست .همين اشكال به روش آقا عماد هم وارد است
بهتر است يك فيلد مثلا id توي جدول باشد كه به عنوان شمارنده يكتا و افزايش يابنده ركورد ست ها باشد . سپس با دستور زير اطلاعات اخر جستجو ميشود ( همان روش آقا پرهام اما بجاي filedName نام اين شمارنده يكتا استفاده شود).
کد:
select top n * from tablename order by id desc

اميدوارم كمك كنه
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
سلام
خوب هستيد
پرهام جان فكر كنم منظورشون اينكه اخرين ركود ست هاي وارد شده باشد.
مثلا فرض كنيم فليد اسم را با آرش پر كند انوقت اگر از اين دستور شما استفاده كند جواب درست نميگرد . چون اخرين اطلاعات شامل فيلد نيم ارش است( با فرض مرتب كردن بر اساس فيلد اسم ) اما جواب گو نيست .همين اشكال به روش آقا عماد هم وارد است
بهتر است يك فيلد مثلا id توي جدول باشد كه به عنوان شمارنده يكتا و افزايش يابنده ركورد ست ها باشد . سپس با دستور زير اطلاعات اخر جستجو ميشود ( همان روش آقا پرهام اما بجاي filedName نام اين شمارنده يكتا استفاده شود).
کد:
select top n * from tablename order by id desc

اميدوارم كمك كنه
کاملا درست میفرمایید سعید جان. منظور من هم از FiledName نام فیلد بود. حالا هر فیلدی که سورت بر اساس اون صورت میگیره! و نه فیلد اسم!
 

MSN_Golden

کاربر تازه وارد
تاریخ عضویت
7 سپتامبر 2004
نوشته‌ها
257
لایک‌ها
3
ممون از همتون
آره دقيقا منظورم هموني بود كه آقا سعيد گفتند ، اما مشكلي كه هست اينه كه دستور از Order By استفاده كرده و اين خودش با داده هاي زياد وقت ميبره ، من اين كار رو ميخواستم انجام بدم كه سرعت كار بيشتر بشه اما اينطوري فكر ميكنم كه اول مياد كل اطالاعات رو Sort ميكنه بعدش مياد فيلتر ميكنه
روش ديگه اي بدون استفاده از Order By هست ؟
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستيد اين روش ببنيد كمك ميكنه :
کد:
 sql = “select * from table”
rs.Open sql,1,1
rs.MoveLast
if not rs.BOF then
rs.moveprev
end if
..
..
..

اميدوارم كمك كنه
 

MSN_Golden

کاربر تازه وارد
تاریخ عضویت
7 سپتامبر 2004
نوشته‌ها
257
لایک‌ها
3
اين روش هم باز هم همون مشكل سرعت رو داره ، اين روشي بود كه قبلا استفاده ميكردم
همون Open كل اطلاعات وقت ميبره ، به ازاء هر ركورد هم دونه دونه بايد بياد عقب كه اينم وقت ميبره
مثلا من اگه قرار باشه 50 تا ركورد آخر رو بگيرم بايد 50 بار MovePrevious بكنم
اگه از طريق خود دستورات Sql ميشد اين كار رو انجام داد و زمان Open كردن فقط همون اطلاعات رو برميگردوند فكر ميكنم از همه بهينه تر بود
يك روش بدون دستور Sql كه به ذهنم رسيد اينه كه اول بياد تعداد ركورد رو بگيريم بعد از همون تعدادي كه ميخواييم از آخر نمايش بديم كم كنيم ، آخرش هم Move كنيم به همون ركورد
ولي خوب اين روش هم همون اول بايد همه ركورد ها رو Select كنه :(
 

rouzbeh_ziafati

Registered User
تاریخ عضویت
17 دسامبر 2006
نوشته‌ها
165
لایک‌ها
5
سن
43
محل سکونت
همدان
من یه فیلد دارد در بانک که چهار نوع داده توش هست . با این مقادیر : فله – پاکت – کلینگر – سایر
حالا میخوام وقتی که توی dbgrid رکوردهای بانک رو نمایش میدم . به ترتیب بر اساس مقادیر این فیلد رکوردها رو مرتب کنه:
اول پاکت ها بعد فله ها بعد کلینگر و بعد سایر . خودم فقط میتونم بر اساس حروف الفبا و با دستور order by مرتب کنم . اما چطور میشه بر اون اساس که گفتم مرتبشون کنم ؟
حروف الفبا که میزنی اول پاکت ها میاد بعد سایر بعد فله و بعد کلینگر .
کسی راهی بلده ؟
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
43
محل سکونت
یه خورده اونورتر
راه سادش اینه که یه شماره بگذاری اول اون رکوردها داخل دیتابیس. 1 برای اولی، 2 برای دومی، 3 برای سومی...
شاید با کوئری هم بشه ولی بنظر سخت میاد!! راه دیگه ای هم داشته باشه نمیدونم.
 

rouzbeh_ziafati

Registered User
تاریخ عضویت
17 دسامبر 2006
نوشته‌ها
165
لایک‌ها
5
سن
43
محل سکونت
همدان
کمک !!!
آقا من این دستور رو نوشتم : در dbgrid و با شئی data درست کار میکنه و رکوردها رو پیدا میکنه .
Data1.RecordSource = "select * from car where name like ('* + Text1.Text + *') and family like ('* + Text7.Text + *') "
Data1.Refresh

اما همین دستور با datagrid و شئی adodc کار نمیکنه !!! و هیچ رکوردی رو پیدا نمیکنه
کسی می دونه چرا ؟؟؟
Adodc1.RecordSource = "select * from car where name like ('* + Text1.Text + *') and family like ('* + Text7.Text + *') "
Adodc1.Refresh
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
43
محل سکونت
یه خورده اونورتر
کمک !!!
آقا من این دستور رو نوشتم : در dbgrid و با شئی data درست کار میکنه و رکوردها رو پیدا میکنه .
Data1.RecordSource = "select * from car where name like ('* + Text1.Text + *') and family like ('* + Text7.Text + *') "
Data1.Refresh

اما همین دستور با datagrid و شئی adodc کار نمیکنه !!! و هیچ رکوردی رو پیدا نمیکنه
کسی می دونه چرا ؟؟؟
Adodc1.RecordSource = "select * from car where name like ('* + Text1.Text + *') and family like ('* + Text7.Text + *') "
Adodc1.Refresh
کد:
Adodc1.RecordSource = "select * from car where name like ('*[B][COLOR=red]"[/COLOR][/B] + Text1.Text + [COLOR=red][B]"[/B][/COLOR]*') and family like ('*[COLOR=red][B]"[/B][/COLOR] + Text7.Text + [COLOR=red][B]"[/B][/COLOR]*') "
 

rouzbeh_ziafati

Registered User
تاریخ عضویت
17 دسامبر 2006
نوشته‌ها
165
لایک‌ها
5
سن
43
محل سکونت
همدان
کد:
Adodc1.RecordSource = "select * from car where name like ('*[B][COLOR=red]"[/COLOR][/B] + Text1.Text + [COLOR=red][B]"[/B][/COLOR]*') and family like ('*[COLOR=red][B]"[/B][/COLOR] + Text7.Text + [COLOR=red][B]"[/B][/COLOR]*') "


من بالا کدی که نوشتم اشتباه بود . دقیقا همین چیزی که شما نوشتی رو نوشته بودم .
برای شئی dbgrid کار میکنه قشنگ ، اما برای Datagrid نه !!!!
آخه چرا ؟!؟!؟!
 
بالا