PDA

View Full Version : سوال: چطوری میشه شماره ID مطالب دیتابیس بدست آورد و به صورت تصادفی یکی از ID ها رو چاپ کرد...



hamidhassas
سه شنبه 09 دی 1399, 09:48 صبح
من 2 تا جدول دارم داخل دیتابیس یکی به اسم news و یکی به اسم see

1- من میخوام اول از همه کلیه شماره های id رکوردهای داخل جدول news که مثلا در گروه ورزش هستند بدست بیارم و از داخل اون شماره id ها بیام یک id به صورت تصادفی چاپ کنم

اینجوری نوشتم



try // شماره ای دی پست

{

$select_blog = $database_connect->prepare("SELECT * FROM `news` WHERE `group`=:group AND `status`='1' ORDER BY `id` DESC");

$select_blog->bindParam(':group', $database_value_read, PDO::PARAM_STR, 100);

$select_blog->execute();

$select_blog->rowCount();

}

catch(PDOException $error)

{

trigger_error('<center><h5 style="color:red">'.$lang['MASSAGE_092'].'</h5></center><br />' . $error->getMessage(), E_USER_ERROR);}

while($post=$select_blog->fetch(PDO::FETCH_ASSOC))

{

$posts_id=''.$post['id'].',';

}




خروجی


69,68,76,92,125,200,261,360,644,726,724


سوال: الان چطوری بگم یکی از این شماره ID ها رو برام چاپ کنه؟ id_random$ چطوری تعیین کنم


2- حالا میخوام یک حلقه تعریف کنم که وقتی اون شماره ID تصادفی برام پیدا کرد بره اون شماره ID داخل جدول see اضافه کنه اون ID به همراه یک تاریخ ثبت و یک تاریخ با ختلاف مثلا 2 روز اضافه در جدول see ذخیره میشن


شرط اول: بیاد چک کنه اگر id_random$ داخل جدول see وجود داشت و تاریخ امروز با تاریخی که برای مدت اعتبار اون id در نظر گرفته شده یکی بود برگرده و یک ID تصادفی دیگه پیدا کنه و اگر وجود نداشت id_random$ به جدول see اضافه کنه


شرط دوم: میخوام کاری کنم که اگر تمامی شماره های ID های مطالبی که از جدول news بدست آوردم به طور کامل یک بار داخل جدول post ذخیره شده بودن کل اون ID ها از داخل جدول post حذف بشن و حلقه مجدد تکرار بشه و باز id های تصادفی لیست بشن و باز در جدول see ذخیره بشن

این چرخه میخوام مدام تکرار بشه


توضیحات: در اصل میخوام به صورت خودکار کاری کنم که هر مطلبی که در جدول news وجود و مثلا مال گروه ورزشی هست به طور کامل یک بار داخل سایت مثلا برای 2 روز عنوانش نمایش داده بشه و وقتی یک دور کامل تمام این مطالب نمایش داده شدن مجدد تمام اون مطالب خودکار نمایش داده بشن برای 2 روز

roxment
سه شنبه 09 دی 1399, 20:50 عصر
توضیحات در فایل ضمیمه

hamidhassas
پنج شنبه 11 دی 1399, 10:35 صبح
تشکر از لطف شما اما کد عمل نمیکنه




$group = '2'; // گروه مطلب خبر

$today_en= str_replace('-','/',$join_today_en); // تاریخ امروز 12-10-1399

$tomorrow_en = reduce_date_en(3); // تاریخ سه روز آینده 15-10-1399


try // انتخاب جدول خبر

{

$select_blog = $database_connect->prepare("SELECT * FROM `news` WHERE `group`=:group AND `status`='1' ORDER BY `id` DESC");

$select_blog->bindParam(':group', $group, PDO::PARAM_STR, 100);

$select_blog->execute();

$news_cont=$select_blog->rowCount();

}

catch(PDOException $error)

{

trigger_error('<center><h5 style="color:red">خطا: عدم امکان تعیین گروه خبر</h5></center><br />' . $error->getMessage(), E_USER_ERROR);

}


while($post=$select_blog->fetch(PDO::FETCH_ASSOC))

{

$posts_id=''.$post['id'].',';

}


try // انتخاب جدول مطالب عنوان سایت

{

$select_blog_top_post = $database_connect->prepare("SELECT id,end_date FROM `see` ORDER BY `id` DESC");

$select_blog_top_post->bindParam(':group', $database_value_read, PDO::PARAM_STR, 100);

$select_blog_top_post->execute();


$top_post_cont=$select_blog_top_post->rowCount();

}

catch(PDOException $error)

{

trigger_error('<center><h5 style="color:red">خطا: عدم امکان تعیین وجود مطلب در عنوان سایت</h5></center><br />' . $error->getMessage(), E_USER_ERROR);

}


while($record_row=$select_blog_top_post->fetch(PDO::FETCH_ASSOC))

{

$SeeList=array($record_row['id']);

}


foreach($List AS $Data)

{

$SeeList[]=array($Data['id']=>$Data['end_date']);

}


function CheckSee()

{

global $posts_id, $SeeList, $today_en;

$DataEx=explode(',',$posts_id);

$Count=count($DataEx)-1;

$RandID=rand(0,$Count);

var_dump($RandID);


//Check See

$Acc=0;

if(isset($SeeList[$RandID])){

if($SeeList[$RandID]==$Todaye)

{

$Acc=1;

}

}

// Result

if($Acc==1)

{ try // شماره ای دی پست

{

$insert_blog_top_post = $database_connect->quary("INSERT INTO `see` (`post_id`, `start_date`, `end_date`) VALUES ($SeeList[$RandID], $today_en, $tomorrow_en)");

$insert_blog_top_post->execute();

}

catch(PDOException $error)

{

trigger_error('<center><h5 style="color:red">خطا: عدم امکان درج مطلب در عنوان سایت</h5></center><br />' . $error->getMessage(), E_USER_ERROR);

}

echo"This ID=".$SeeList[$RandID];

}else{

//Loop

CheckSee();

}


}


echo CheckSee();

roxment
پنج شنبه 11 دی 1399, 10:55 صبح
کد را تست کرده بودم الان که میگین عمل نمی کنه به این علت است که نتوانستید با دیتابیس خود مچ کنید و لیست پیش نیاز را با فرمت مورد نظر ایجاد کنید
به طور مثال شما فرمت لیست خود را 68,65,47 معرفی کردید که من explode کردم الان در کدی که گذاشتید اطلاعات را در array ریختید که تحت این شرایط عملیات تفکیک مختل شده و پیرو ان باقی عملیات با خطا مواجه شده
در نهایت در نظر داشته باشید درخواست هایی که توسط شما و دیگر دوستان مطرح می شود خارج از cms بوده و کدی که من و سایر دوستان در اختیار شما قرار می دهم به صورت php raw هست چون ما اطلاعی از ساختار cms شما نداریم نمی توانیم مطابق با ان کد نویسی کنیم و در نهایت یک سمپل با خروجی مورد نظر شما ارسال می کنم تا شما آن را با کد خود مچ کنید اگر نمونه کدی که من قرار دادم را خارج از cms خود چک کنید می بینید که به صورت صحیح کار می کند

hamidhassas
پنج شنبه 11 دی 1399, 16:37 عصر
اگر امکان داره یک نگاهی به این کد بندازید و مشکلش برام حل کنید ممنون میشم

http://derak-fars.ir/top_post.zip

hamidhassas
یک شنبه 14 دی 1399, 11:59 صبح
چطوری میتونم شماره های id رکوردهای داخل جدول news که مثلا در گروه ورزش هستند با کد زیر نمایش میدم و از داخل اون شماره id ها یک id به صورت تصادفی بدست بیارم؟



try // شماره ای دی پست

{

$select_blog = $database_connect->prepare("SELECT * FROM `news` WHERE `group`=:group AND `status`='1' ORDER BY `id` DESC");

$select_blog->bindParam(':group', $database_value_read, PDO::PARAM_STR, 100);

$select_blog->execute();

$select_blog->rowCount();

}

catch(PDOException $error)

{

trigger_error('<center><h5 style="color:red">'.$lang['MASSAGE_092'].'</h5></center><br />' . $error->getMessage(), E_USER_ERROR);}

while($post=$select_blog->fetch(PDO::FETCH_ASSOC))

{

$posts_id=''.$post['id'].',';

}




خروجی


69,68,76,92,125,200,261,360,644,726,724


سوال: الان چطوری بگم یکی از این شماره ID ها رو برام چاپ کنه؟ id_random$ چطوری تعیین کنم

plague
یک شنبه 14 دی 1399, 14:38 عصر
$posts = [] ;

while($post=$select_blog->fetch(PDO::FETCH_ASSOC))

{

$posts_id=''.$post['id'].',';
$posts[] = $post ;

}


echo $posts[rand(0,count($posts))]['id'];