PDA

View Full Version : سوال: درج در بین چند رکورد



yaqubian
شنبه 18 خرداد 1387, 23:31 عصر
سلام - می خواستم بدونم دوستان چطور می شه در php یه رکورد جدید رو مابین رکوردهای قبلی جا داد.
مثلا رکورد جدید رو بعد از رکورد 5 ام گذاشت - ممنون

Bahram0110
شنبه 18 خرداد 1387, 23:55 عصر
به چه دردی می خوره این کار؟؟
فرقی نداره اگه رکورد جدید به ترتیب آی دی مرتب شده باشه یا بره آخر ...
نتیجه یکیه

yaqubian
یک شنبه 19 خرداد 1387, 00:11 صبح
Bahram0110 عزیز مثلا یه جدول داریم که داخلش abstract یه سری مقاله رو نگهداری می کنیم بعدش می خوایم بعد از مقاله سوم مقاله جدید رو اضافه کنیم ولی با sort کردن id نمی شه. یعنی باید insert بعد از مقاله سوم انجام بشه. درسته که درج جدید در انتهای جدول انجام می شه ولی چطور می شه نحوه نمایشش رو واسه بعد از مقاله سوم درست کرد؟ مرسی

ali_kolahdoozan
یک شنبه 19 خرداد 1387, 07:36 صبح
مگر sort نداري . يك كدي چيزي بر اساس تاريخي يك جوري sort كن

musiox
یک شنبه 19 خرداد 1387, 09:46 صبح
می تونی خودت یه فیلد برای مرتب کردن توش بزاری. با تاریخ هم میشه . با آی دی هم میشه ....

yaqubian
یک شنبه 19 خرداد 1387, 23:04 عصر
musiox عزیز مرسی ولی می شه راهنمایی کنید
چون با تاریخ و آی دی نمی شه در ضمن فیلدی که تعریف کنم باید چه نوعی داشته باشه؟ این مسئله خیلی مهمه واسم. مرسی

vahid4134
یک شنبه 19 خرداد 1387, 23:17 عصر
فیلد بهتره به صورت int باشه. index هم داشته باشه
(با اجازه ی musiox که جواب دادم)

yaqubian
دوشنبه 20 خرداد 1387, 00:03 صبح
vahid4134 عزیز می شه یه مثال عملی بزنید
ممنون می شم من کارم برنامه نویسی حرفه ایم هستم شاید سئوالم خیلی خنده دار باشه ولی من تو تیم تحلیل یه کارخونم ولی این موضوع رو نتونستیم درست کنیم البته امشب یه راه حل رو تست کردیم و درست شد ولی می خوام بدونم شما چه راه حلی پیشنهاد می کنین؟ مرسی

ali_kolahdoozan
دوشنبه 20 خرداد 1387, 00:48 صبح
چطور حرفه اي هستيد . چيزي به اين ساد گي رو توش موندين؟

sma_mohseni
دوشنبه 20 خرداد 1387, 11:06 صبح
سلام
یه فیلد به جدولت اضافه کن مثلا با عنوان Priority (اولویت)
هنگام اضافه کردن یک رکورد جدید(مقاله جدید) میتونی Priority اونو هر چی میخاهی قرار بدی
فقط باید حواست باشه که Priority تکراری نباشه

musiox
دوشنبه 20 خرداد 1387, 12:23 عصر
شما دوباره سوالتو بپرس . اگه میگی که مرتب نمیشه پس اصلا معلوم نیست که کدوم اوله کدوم دومه ...
اگرم هم معلوم هست که ترتیب دارن باید ببینی بر اساس کدوم پارامتر ها این حرف رو مزنی . خب بر اساس همون ها هم این کار رو باید انجام بدی .
(اجازه ما هم دست شماست)

vahid4134
دوشنبه 20 خرداد 1387, 14:10 عصر
سلام
یه فیلد به جدولت اضافه کن مثلا با عنوان Priority (اولویت)
هنگام اضافه کردن یک رکورد جدید(مقاله جدید) میتونی Priority اونو هر چی میخاهی قرار بدی
فقط باید حواست باشه که Priority تکراری نباشه

این دوست عزیز که چه فیلدی باید به کار ببری البته. برای مواردی که مثل هم هستند هم می تونی از دو فیلد برای sort استفاده کنی.
باز هم تاکید می کنم که index رو این قسمت فراموش نشه وگرنه ...
بهتره این قسمت رو بخونی
http://dev.servers24.ir/node/13

امید امرایی
دوشنبه 20 خرداد 1387, 14:21 عصر
اصلا چه فرقی می کنه کدوم اول باشه کدوم آخر . مگه شما قراره Database manager طراحی کنید تازه در اونصورت هم فرقی نمی کرد

اینکه دیتا چه جوری ذخیره می شه مهم نیست . مهم اینه که چه جوری نمایش داده بشه که ربطی به اول و آخر بودن نداره . بنده هم فکر می کنم این کار وقت تلف کردنه . شما نتیجه درخواست خودتون رو به هر شکلی می تونید نمایش بدید .

شاید اگه بگین اصل کاری که می خواید انجام بدید چیه بهتر بشه کمک کرد .

1- اگه مقالات شما به هم مربوط می شن با یک parent_id می تونید همه چی رو حل کنید و اگه نمی شن که دیگه همه چی بی معنی می شه

2- اگه باز هم مورد اول صادق باشه و صرفا برای نمایش اونم توی بانک اطلاعاتی مشکل دارید با یک GROUP BY همه چی حله

vahid4134
دوشنبه 20 خرداد 1387, 22:26 عصر
فکر کنم دوست عزیز درست منظورشون رو رسونده باشند
مثلا یک منو دارید که از دیتابیس می خوایید اطلاعاتش رو بگیرید حالا وقتی یکی رو حذف کردید و یا خواستید یکی رو اضافه کنید اینجا ترتیب مهم هست

yaqubian
دوشنبه 20 خرداد 1387, 22:40 عصر
دوستان عزیز از همه ممنونم ولی موضوع ازین قراره
یه جدول داریم شامل سه فیلد id و loginname و paper که هر loginname واسه خودش یه paper درج می کنه البته به صورت abstract که همون خلاصه باشه. حالا فرض کنین یه کاربر می خواد بین رکورد 5 و 6 خودش یک مقاله جدید رو درج کنه. چطور باید این کار رو انجام بده. با id نمی شه چون id بصورت auto increament هست البته من راه حل رو بدست آوردم و برنامه هم با اضافه کردن یه فیلد جدید کار می کنه البته نه بصورتی که دوستان توضیح داده بودن یه مقداری کار می بره. لطفا این مطلب رو تست کنین چون خیلی مهمه. از تاریخ هم نمی شه استفاده کرد چون در یه روز ممکنه کاربر بخواد چند رکورد رو لابلای رکورداش نمایش بده. در ضمن وقتی رکوردی اضافه می شه چطور بگیم این رکورد جدید بصورتی که می خوایم و در محلی که می خوایم قرار بگیره منظورم موقع نمایشه. اگر دوستان پیشنهادی دارن بگن. البته من راه حل خودم رو هم بعدا می ذارم تا ببینین به این سادگی هم که پیشنهاد دادین نیست.
بازم از همه ممنونم.

vahid4134
دوشنبه 20 خرداد 1387, 23:40 عصر
شما راه حل خودتون رو بزارید تا یه نگاهی بندازیم

musiox
سه شنبه 21 خرداد 1387, 18:00 عصر
راه حلش اینه که یه فیلد اضافه کنی که توش ترتیب مقاله ها باشه و همونطور که دوستمون جناب vahid4134 گفتن


فیلد بهتره به صورت int باشه.

بعد برای اولین مقاله میشه 1, برای دومین میشه 2 و....
اگرم خواستی مقاله ای مابین مقاله ها اضافه کنی یه دستور update کارتو راه میندازه .

yaqubian
شنبه 25 خرداد 1387, 06:22 صبح
راه حل تمام دوستان درسته ولی حساب کنید بیش از 1000000 رکورد وجود داشته باشه می دونید چقدر زمان و حافظه مصرف می شه تا عمل update انجام بشه؟؟
من فیلد سوم رو بصورت double تعریف کردم و توسط فایل زیر که واستون ارسال کردم هر شخص که با لاگین خودش وارد می شه می تونه بدون اینکه نیازی باشه بدونه بقیه priority ها چند بودن فقط انتخاب کنه که رکورد جدیدش بعد از کدوم رکورد می خواد اضافه بشه؟
امیدوارم این راه حل بدردتون بخوره چون تمام راه حل دوستان در مرحله تئوری درسته اما در عمل و در پیاده سازی یا نمی شه یا زمان و حافظه زیادی رو مصرف می کنه.
موفق باشین و از نظرات همگی هم ممنون

musiox
شنبه 25 خرداد 1387, 08:32 صبح
بیش از 1000000 رکورد وجود داشته باشه می دونید چقدر زمان و حافظه مصرف می شه تا عمل update انجام بشه

این پس چیه ؟ ( حالا بی خیال بقیه ... )


$result_id=mysql_query("select * from $tb_l");
while($row_id=mysql_fetch_row($result_id))
{
if((int)$row_id[3]==(int)$row_idd[3])
{
$record_id[]=$row_id[3];
}
}

ما توی این روشی که گفتیم بر اساس کاربر عمل بروز رسانی رو انجام میدیم .

yaqubian
شنبه 25 خرداد 1387, 22:53 عصر
ممنون musiox عزیز
می شه در قالب یه مثال عملی به من بگید روشتون چه جوریه؟ روش من درست عمل می کنه تستش کردم حتی رو سرور دانشگاه فردوسی هم تست شده چون من واسه اونا کار می کنم.
خوشحال می شم از راهنماییتون استفاده کنم.
بازم مرسی

musiox
دوشنبه 27 خرداد 1387, 19:52 عصر
UPDATE $tb_l SET id_insert=id_insert+1 WHERE id_insert>=$idd AND loginname='$loginname'
INSERT INTO $tb_l(loginname,$tb_field,id_insert) VALUES('$loginname','$search_like',$idd)

yaqubian
سه شنبه 28 خرداد 1387, 00:27 صبح
musiox عزیز ازتون ممنونم تستش می کنم و دوباره بهتون خبر می دم. مرسی