چگونه ليست ركوردهاي قبلي و بعدي را بدست بيارم (MySql)

rudehen

Member
سلام

ببينيد يه سوال

يه ديتا بيس داريم كه چندتا ستون و چندتا رديف داره:

ستون ها : id - title - body - category ,...

و حالا در نظر بگيريد كه اين ديتا بيس واسه چند قسمت سايت استفاده بشه پس در نتيجه پست هايي كه مثلا تو قسمت A سايت نشون داده مي شه id هاش پشت سر هم نباشه و نظم و ترتيب خاصي هم نداشته باشه.

حالا چطوري مي تونم كه اطلاعات ركوردهاي قبلي و بعدي اين رو بدست بيارم.

نمونه id هاي يه بخشي از سايت مثلاْ:
25 - 40 - 45 - 46 - 47 - 53 - 58 - و...
 

arashdanger

Member
احتمالا منظورشون اینه که این رکوردها نظمشون نظم زمانی نیست(نظم زمانی رو میشه از روی id فهمید) و یه نظم دیگه ای دارن.
 

mosi20

Active Member
منظورش اینه که لینکه آیتم بعدی را چطوری بدست بیاره یا لینک آیتم قبلی را
من تا حالا همچین مشکلی داشتم اما نمیدونم چطوری درستش کردم
 

oxygenws

Active Member
خوب اینکه مشکلی نیست که!!! شاید هم من نفهمیدم.
از کجا معلوم میشه که کدام رکورد در بخش A باید نمایش داده بشه؟؟
 

rudehen

Member
دوستان خوب

یه ستون دیگه هست مثلا whatshow که مقادیر .و1و2و... رو می گیره و بعد مثلا اگه بخوایم تو A نشون بدیم میگیم که اونایی که whatshowشون 0 هست و...

من می خواستم از همین المنت واسه دستیابی رکورد قبلی و بعدی استفاده کنم که به دلیل عدم نظم تو ارسالها نشد.

یه بار دیگه می گم مطالب پست شده تو A و دیگر جاها چون نظم نداشته تو بدست اوردن رکورد قبلی و بعدی گیر کردم

کسی بلتة؟
 

Amir61

New Member
اگه idهایی که میدی به ترتیبن فک کنم این Query جواب بده:
این با فرض این که می خوای پست قبل از پست 123 رو پیدا کنی نوشته شده:

SELECT Max(ID)
FROM Table
WHERE WhatShow= 0
AND ID< 123
 

rudehen

Member
مرسی میرم الان چکش کنم
تا فردا جواب تونو می دم
ایشالا همین کار کنه

امیر جان بازم مرسی فعلا
 

mosi20

Active Member
ببین باید از limit استفاده کنی و در هر صفحه فقط یه آیتم را نشون بدی
اینطوری دیگه خیلی راحت میشه کارت
به صورت هوشمند لینکهای بعدی و قبلی را با یک سری عملیات ریاضی بدست میاری
 

rudehen

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

آخه مثلا id این پست مورد نظر هست 10
بعدی اش 19
قبلی اش 8

خب ؟؟


ببینم راهی هست که بگه مثلا: "پیدا کن بیشترین مقدار که از این id بزرگتر باشه و اولی باشه"
 

mosi20

Active Member
سلام
ببین این چیزی که من میگم را گوش کن به ترتیب عمل کن.
اول مشخص کن بر چه اساس میخواهی نوشته هات دسته بندی بشند و در آخر کواری مربوطه اونو مشخص کن.
دوم برای هر صفحه میزان لیمیت باید یک باشه یعنی فقط یه نتیجه را نشون بده.
سوم تعداد کل نتیجه ها را مشخص میکنی و بهش حالی میکنی که تا وقتی تعداد نتیجه هات از شماره ی نتیجه ای که داره نشون داده میشه بیشتر هستش لینک پست بعدی و پست قبلی را نشون بده .
حالا لینک پستی و قبلی را بر اساس لیمیت باید بدست بیاری .دیگه توی لیمیت اصلا مهم نیست که تو بر حسب چی میخواهی نوشته هات را دسته بندی و مرتب بکنی .بلکه مهم اینه که تعداد نتیجه هات چند تا هستش و الان نتیجه ی شما ره ی چند داره نشون داده میشه
این مقاله را هم بخون یکم به این موضوع که گفتم ربط داره
http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=10
یا حق
 

Amir61

New Member
من نفهمیدم چرا اصرار دااری که باید از limit استفاده کنه؟ limit برای وقتیه که بخوای از n تا نتیجه ,m تا را
ببینی البته میشه یه جورایی ازش استفاده کرد مثلا به جای اون query رو که نوشته بودم بنویسی ....

اگه idها به ترتیب نیستن باید یه فیلدی مثل تاریخ ارسال و یا همچین چیزی تو tableات داشته باشی اگه داری که خوب query رو عوض کن به

SELECT Max(ID)
FROM Table
WHERE WhatShow= 0
AND PostDate< (SELECT PostDateFROM Table WHERE id= 123

این رو تست کن. اگه همچین فیلدی (تاریخ ثبت نوشته) نداری دیگه نمی شه کاری کرد
 

mosi20

Active Member
خوب حالا ما این m را یدونه در نظر میگیریم
مشکلی پیش نمیاد که. میاد؟
 

rudehen

Member
بچه ها مرسی
میرم الان این کارا رو بکنم ببینم چی میشخ

خبرش بهتون می دم
 

rudehen

Member
يه بار ديگه سوال رو مي گم

ببينيد من هنوز نتونستم اينو حل كنم به همين خاطر دوباره مي گم.

ببينيد يه تيبل تو ديتا بيس هست كه واسه دو قسمت سايت مطلب توش ريختيم. آي دي ها قره قاطي هستن و مطلب هر قسمت آي دي هاش نظم و ترتيب خاصي ندارن مثلا:

کد:
id	title	  bodytext	year	month	 day	time	cat
---	-----	  ------------	-----	----	----	---             ----
1	...	    ...		2005	05	06	12:20	blog
2	...	    ...		2005	05	07	13:30	blog
3	...	    ...		2005	05	07	13:40	e-zine
4	...	    ...		2005	05	07	15:50	e-zine
5	...	    ...		2005	05	08	12:01	blog
6	...	    ...		2005	05	09	02:09	e-zine
7	...	    ...		2005	05	12	15:19	e-zine
8	...	    ...		2005	06	25	13:13	blog

حالا اي دي 5 رو نگا كنين اين بايد تو وبلاگ نشون داده بشه.
كه نشون هم داده مي شه.

حالا مي خوام يه كادر داشته باشم كه مطلب بعدي و قبلي وبلاگ رو هم به مخاطبا نشون بديم.

يه كوپري بدين كه بشه باهاش به محتويات آي دي هاي 8 و 2 كه مطالب قبلي و بعدي هستن دسترسي داشته باشم.

تروخدا زود باشين
و ممنون تونم از همين حالا
از بقيه هم كه تاحالا كمك كردن ممنونم و شرمندم كهكار نمي كنه!
 

mosi20

Active Member
یه سوال دارم ازت؟
آی دی 8 و 2 چطوری قبل و بعد از آیدی 5 هستند؟
بر اساس چه چیزی مرتب میکنی ؟
PHP:
$result = mysql_query("SELECT * FROM `youttable`  WHERE 1  ORDER BY `what yuo want` ASC  LIMIT $num2  , $num1") or die(mysql_error());
حالا شما باید $num2 و $num1 را بدست بیاری
 

rudehen

Member
منظورم این بود که قاطی پاتیه.
وگرنه ممکنه 10 تا مطلب blog پشت سر هم بیاد و بعد فقط یدونه e-zine.

اینها به ترتیب پست شدن مرتب می شن دیگه.
هر پست هم یه ای دی داره.
 

mosi20

Active Member
این کد را برات نوشتم اما تستش نکردم
خودت تستش کن
اسم تیبلت را هم داخلش بزار
اگه جاییش ارور داد خودت توی کوائری هایی که من نوشتم یه کم تغییر ایجاد کن مخصوصا جاهایی که علامت > و < وجود داره

PHP:
<?
//mysql host name//
$DBHOST = "localhost";        
//database username//
$DBUSER = "";    
//database password//       
$DBPASS = "";
//database name//         
$DBNAME = "";               
//Connect to mysql//
mysql_connect($DBHOST, $DBUSER, $DBPASS) or die(mysql_error());
//Connect to database//
mysql_select_db($DBNAME) or die(mysql_error());
//get post detail//
$searchinfo=$_GET['id'];
$result = mysql_query("SELECT * FROM `yourtablename` WHERE id ='{$searchinfo}'") or die(mysql_error());
$row = mysql_fetch_array( $result );
$title = $row['title'];
$text = $row['bodytext'];
//information for get next and previous post name//
$id = $row['id'];
$cat = $row['cat'];
//show post detail
print'<b>'.$title.'</b><br>'.$text.'<br>';
//get the next post name //
$nextpost = mysql_query("SELECT * FROM `yourtablename` WHERE `cat`='{$cat}' AND id >'{$id}'  ORDER BY `id` ASC LIMIT 1 , 1 ") or die(mysql_error());
$numnextpost=mysql_numrows($nextpost);
if ( $numnextpost !== "0" ){
$nextinfo = mysql_fetch_array( $nextpost );
$nextposttitle =$nextinfo['title'];
//show next post title//
print'<b>next post</b><br>'.$nextposttitle.'<br>';
}
//get the previous post name //
$previouspost = mysql_query("SELECT * FROM `yourtablename` WHERE `cat`='{$cat}' AND id <'{$id}'  ORDER BY `id` ASC LIMIT 1 , 1 ") or die(mysql_error());
$numpreviouspost=mysql_numrows($previouspost);
if ( $numpreviouspost !== "0" ){
$previousinfo = mysql_fetch_array( $previouspost );
$previousposttitle =$previousinfo['title'];
//show previous post title//
print'<b>previous post</b><br>'.$previousposttitle.'<br>';
}
?>
 
آخرین ویرایش:

rudehen

Member
از زحماتتون متشكرم
الان مي رم تستشون مي كنم
و خبرشو بهتون مي دم

بازم ممنون :)
 

جدیدترین ارسال ها

بالا