PDA

View Full Version : سوال: چگونه رکوردهای موجود در پایگاه داده ها را از آخر به اول بازیابی کنیم؟



webmaster.computer
یک شنبه 09 مرداد 1390, 08:06 صبح
سلام به همه ی دوستان.
من در حال نوشتن یک نرم افزار با استفاده از php و mysql هستم.
یه چیزی مثل سیستم بلاگینگ هستش.
کاربر مطالبش رو وارد می کنه و این مطالب در پایگاه داده هامون در آخرین رکورد جدول مربوطه جای میگیرن.
حالا وقتی که می خوام پست هارو نمایش بدم طبیعتا آخرین پست ارسالی باید اولین پستی باشه که نمایش داده میشه. ولی با استفاده از SELECT query و تابع mysql_fetch_array اطلاعات به ترتیب ورود در پایگاه داده ها نشون داده میشه که مطلوب ما نیست.
برای حل این مشکل چه راه هایی پیشنهاد می کنید؟
ممنونم.:لبخندساده:

MSN_Issue
یک شنبه 09 مرداد 1390, 09:02 صبح
یه فیلد به جدولتون اضافه کنید (مثل time یا زمان ثبت) بعد بر اساس اون سورت کنید خروجی رو ...

webmaster.computer
یک شنبه 09 مرداد 1390, 15:34 عصر
یه فیلد به جدولتون اضافه کنید (مثل time یا زمان ثبت) بعد بر اساس اون سورت کنید خروجی رو ...
درسته.
این راه عملی هستش.
ولی از اونجایی که این سایت عمل نمایش رو مکررا انجام میده فکر کنم این الگوریتم درجه ی زمانی بالایی داشته باشه.
علاوه بر این راه چند تا راه دیگه به فکر خودم رسیده. مثلا اینکه یه رکورد تو یکی از جدولام درست کنم که یک ستون name و یک ستون value هم تو اون جدول موجود باشه. سپس name رو با postcount و value رو با صفر مقدارگذاری بکنم.بعد از اون هر بار پستی به جدول پستها اضافه/کم شد یک واحد به/از اون اضافه/کم بکنم تا همیشه ID آخرین رکورد جدول پستهارو داشته باشم.بعد از اون هر بار که می خوام پستها رو نشون بدم با شروع از آخرین رکورد و -- کردن ID پستم٬ پستهام رو از آخر به اول در خروجی نمایش بدم.
فقط یه مشکلی هست.
من اطلاعات مورد نظرم رو از پایگاه داده ها اینطور در یافت می کنم:

$result=mysql_query($query,$db)
که $query یک فرمان SELECT و $db هم یک اشاره گر به پایگاه داده هام هستش.
$result رو هم نمیدونم دقیقا چه نوعی داره.اونطور که خوندم یک اشاره گر به resource هستش.
دو تا سوال دارم.
۱. $result یک آرایه ی دو بعدی هست؟ اگه نیست چیه دقیقا؟
۲. چطور با در دست داشتن $result و ID آخرین رکورد جدولم٬ می تونم رکوردهای جدولم رو از آخر به اول بازیابی کنم و نمایش بدم؟

Arthas1990
یک شنبه 09 مرداد 1390, 16:16 عصر
آره ، یک آرایه دو است .
شما میتونی خیلی راحت تمام داده ها رو از جدول بگیری و بعد با count و i-- و یه حلقه for برعکس دیتا ها رو استفاده کنی . اما معمولا مستقیما طبق گفته ی msn هم میشه عمل میکنند ولی با این روش که آرایه رو برعکس بخونی .
امیدوارم کمکی کرده باشم

ghasemweb
یک شنبه 09 مرداد 1390, 16:35 عصر
شما فقط بیا با این کد به صورت نزولی مرتبش کن موقع کوئری همین رو میخوای دیگه؟

select * from table_name order by id DESC

webmaster.computer
یک شنبه 09 مرداد 1390, 17:07 عصر
آره ، یک آرایه دو است .

من اطلاعات یک جدول با ۶ سطر و ۴ ستون که اسم یکی از ستونهاش body هست رو در$result ریختم و اون رو به دو صورت زیر امتحان کردم


echo $result[1][1];
echo $result[1]['body'];

ولی هیچ چیزی در خروجی چاپ نشد
پس با این حساب $result یک آرایه ی دو بعدی نیست.
درسته؟

ghasemweb
یک شنبه 09 مرداد 1390, 18:17 عصر
ببین چه اهمییتی داره دونستنش معمولا بعد این که جواب کوئری رو تو result$ یا هر متغیر دیگه ای ذخیره کردی باید با mysql_featch_rows رکوردها رو دسته بندی کنی یعنی بعد این مرحله است که شما میتونی بگی متغییرت دوبعدی است به مثال زیر توجه کن


$query="select url from links";
$res=mysql_query($query,$config) ;
$rows=mysql_fetch_array($res);
echo $rows['url'];


متغیر rows$ حالت آرایه داره الان

webmaster.computer
یک شنبه 09 مرداد 1390, 20:27 عصر
ببین چه اهمییتی داره دونستنش
کارم که راه افتاد آقا قاسم.
فقط می خواستم بیشتر بدونم.
ممنون از همه ی دوستانی که سعی کردن کمکم کنن.:لبخندساده:

ghasemweb
یک شنبه 09 مرداد 1390, 23:50 عصر
خوب خدارو شکر همشهری[زنجان]عزیزم که مشکلت بر طرف شد.
راستش جواب قطعی ندارم واسش ولی تست میکنم اگه چیزی فهمیدم در اخیتارتون میذارم
موفق باشید

Arthas1990
دوشنبه 10 مرداد 1390, 19:00 عصر
با print_r($array); چاپ کن res رو تا کلا متوجه بشی چی توشه . اینجوری میتونی تریس کنی.