ورود

View Full Version : سوال: رکورد بعدی در دیتابیس



alimooghashang
دوشنبه 06 خرداد 1387, 19:34 عصر
با سلام

من چطور میتونم با یک query تو دیتا بیس رکورد بعدی و قبلی یک رکورد را بگیرم

قابل توجه که فیلد ID من که Primery Key هست عدد هاش ترتیبی نیست


مثلا

1
3
6
7
10
24

اگر ترتیبی بود خودم راحت با یه id+1 میگرفتم
اما ترتیبی نیست
میخوام بگم رکورد بعدی، مثلا رکورد بعدی 7 که میشه ID=10

maysamscript
دوشنبه 06 خرداد 1387, 21:26 عصر
select * from table where id > 7

alimooghashang
دوشنبه 06 خرداد 1387, 21:30 عصر
select * from table where id > 7


مرسی که جواب دادی

من یه رکورد میخوام نه رکورد های بعدی رو

فقط یه رکورد بعدی و یه رکورد قبلی

و فیلد ID من به ترتیب نیست

مرسی که جواب نمیدی

maysamscript
سه شنبه 07 خرداد 1387, 06:56 صبح
خوب اینو به بالایی اضافه کن
limit 0,1

alimooghashang
سه شنبه 07 خرداد 1387, 12:00 عصر
با سلام

من چطور میتونم با یک query تو دیتا بیس رکورد بعدی و قبلی یک رکورد را بگیرم

قابل توجه که فیلد ID من که Primery Key هست عدد هاش ترتیبی نیست


مثلا

1
3
6
7
10
24

اگر ترتیبی بود خودم راحت با یه id+1 میگرفتم
اما ترتیبی نیست
میخوام بگم رکورد بعدی، مثلا رکورد بعدی 7 که میشه ID=10


ببین داداش
من رکورد هام طبق بالاست

الان میخوام یه کدی بنویسم که الان که رکورد مثلا 3 را دارم نشون میدم
رکورد قبلی اش 1 و رکورد بعدی اش 6 را هم نشون بدم
اما این رکورد همیشه فقط 3 نیست
میخوام برای همه رکورد ها قابل اجرا باشه
چون ترتیب شون مثل هم نیست و اختلافشون زیاده
فقط میخوام بگم تو دیتا بیس رکورد بعدی و رکورد قبلی
مثلا تو دلفی داشتیم adoquery1.next
میرفت رکورد بعدی را برمیگردوند

و یه سوال دیگه
چطور رکورد تصادفی بگیرم؟
با تشکر

tabib_m
سه شنبه 07 خرداد 1387, 19:13 عصر
جواب دوستان درست بود. فقط کمی اشتباه داشت (یعنی سورت رو جا انداخته بود) :)


select * from `tableName` where `id`>'3' order by `id` limit 1

نتیجه ی این کوئری میشه دقیقا رکورد بعدی.



select * from `tableName` where `id`<'3' order by `id` desc limit 1

و نتیجه ی این کوئری هم دقیقا رکورد قبلی هست...


و یه سوال دیگه
چطور رکورد تصادفی بگیرم؟
اگر جستجو میکردی بود. حالا هم که جستجو نکردی، بهتر بود جداگانه مطرح میکردی. ولی در هر صورت:


select * from `tableName` order by rand() limit 1

نتیجه ش میشه یک دونه رکورد به صورت تصادفی. و اگر limit رو برداری، میشه همه ی رکوردها به صورت نامرتب...

موفق باشید.