PDA

View Full Version : نحوه ی تعیین ذخیره تعداد مشخصی رکورد در دیتابیس برای هر شناسه



ms11309
یک شنبه 29 تیر 1393, 14:10 عصر
سلام
دوستان فرض کنید یه جدول با 3 تا ستون به شکل زیر داریم:
id
record
shenase

خوب حالا از یک صفحه ای خاص این اطلاعات به دیتابیس فرستاده میشه و ذخیره میشه
حالا چطور میشه تعیین کرد که اگه مثلا shenase برابر بود با mohammad فقط 5 تا ستون اختصاص بده و بیش از اونو بیاد جایگزین کنه

این کارو میخوام برای کاهش حجم دیتابیس انجام بدم که الکی ذخیره نکنه چون 5 تاش کافیه

مثلا به این صورت

id record shenase
--------------------------
yek teste1 moham
do teste2 moham
se teste3 moham
ch teste4 moham
pan teste5 moham

و از این به بعدش اگه شناسه moham بود جایگزین همین 5 تا کنه

لطفا راهنمایی کنید!!

arenaw
یک شنبه 29 تیر 1393, 14:31 عصر
تو اون صفحه ای که توی دیتابیس اینزرت میکنه، باید این کوئری رو قبلش بزنید:

SELECT COUNT(*) FROM `table` WHERE `shenase` = '$shenase';

بعد جواب این کوئری رو توی یه متغیر بریزید و قبل از اینکه عملیات اینزرت رو انجام بدین، چک کنید که مقدار اون متغیر به 5 رسیده یا نه، اگه نرسیده بود اینزرت کنه و اگه رسیده بود، بیاد همین کوئری آپدیت که میگید رو اجرا کنه.

ms11309
یک شنبه 29 تیر 1393, 14:48 عصر
تو اون صفحه ای که توی دیتابیس اینزرت میکنه، باید این کوئری رو قبلش بزنید:

SELECT COUNT(*) FROM `table` WHERE `shenase` = '$shenase';

بعد جواب این کوئری رو توی یه متغیر بریزید و قبل از اینکه عملیات اینزرت رو انجام بدین، چک کنید که مقدار اون متغیر به 5 رسیده یا نه، اگه نرسیده بود اینزرت کنه و اگه رسیده بود، بیاد همین کوئری آپدیت که میگید رو اجرا کنه.

تشکر بابت راهنماییتون
میشه قسمت دوم هم یه نمونه کد بدید نحوه جایگزینی
یه مشکلی که هست id خودکار شماره بنده میشه تو دیتابیس
بهئ بخ.اد جایگزین کنه ترتیب رکورد ها موقع چاپ بهم نمیخوره؟

arenaw
یک شنبه 29 تیر 1393, 14:57 عصر
قرار نیست جایگزین بشه (یعنی یه کدومشون پاک بشه و دوباره اینزرت بشه)، قراره یه کدوم از همون رکوردها با مقادیر جدید ویرایش بشه، پس ترتیب به هم نمیخوره.
یه چیزی رو متوجه نشدم، فرض کنید که 5 تا رکورد وجود داره و الان از صفحه یه درخواست دیگه فرستاده میشه. این اطلاعات باید جای کدوم یکی از اون 5 تا قرار بگیره؟

ms11309
یک شنبه 29 تیر 1393, 15:08 عصر
قرار نیست جایگزین بشه (یعنی یه کدومشون پاک بشه و دوباره اینزرت بشه)، قراره یه کدوم از همون رکوردها با مقادیر جدید ویرایش بشه، پس ترتیب به هم نمیخوره.
یه چیزی رو متوجه نشدم، فرض کنید که 5 تا رکورد وجود داره و الان از صفحه یه درخواست دیگه فرستاده میشه. این اطلاعات باید جای کدوم یکی از اون 5 تا قرار بگیره؟


ببینید این بخش بر اساس شناسه مثلا برای 100 نفر رکورد ذخیره میکنه
و برای هر نفر به ترتیب id مرتب میشه
حالا این 100 نفر ممکنه هر روز یا به نیاز بیان رکورد های جدید بفرستن که ذخیره بشه
مثلا 5 تا برای محمد
5 تا برای علی
5تا برای حسین

و....

در حالت عادی که الان ساختم کلا همه ی رکوردارو ذخیره میکنه ولی 5 تا آخرو نشون چاپ میکنه
که به مرور حجمش خیلی بالا میره

من میخوام 5 تای آخری فقط بمونه و مابقی حذف بشه
و به این صورت چاپ کنه از 5 تا
اول آخرین رکورد که تازه تر از همه ثبت شده
دوم رکورد ماقبل ثبت شده
و ....تا 5 جمین که از همه قدیمی تره

arenaw
یک شنبه 29 تیر 1393, 15:26 عصر
توضیح:
قبل از اینکه اینزرت کنه، چک میکنه که چند تا رکورد با همون `shenase` موجود هستش. اگه مساوی یا بیشتر از 5 بود، میاد اولیشو (اونی که قدیمی تره) رو پاک میکنه.


$shenase = $_GET['shenase'];
$record = $_GET['record'];

$select_result = mysql_query("SELECT COUNT(*) FROM `table` WHERE `shenase` = '$shenase';");
$count = mysql_fetch_array($select_result);

if( $count[0] >= 5 ){
$delete_result = mysql_query("DELETE FROM `table` WHERE `shenase` = '$shenase' ORDER BY `id` ASC LIMIT 1;");
}

$insert_result = mysql_query("INSERT INTO `table`(`id`,`shenase`,`record`) VALUES(NULL,'$shenase','$record');");

ms11309
یک شنبه 29 تیر 1393, 15:49 عصر
توضیح:
قبل از اینکه اینزرت کنه، چک میکنه که چند تا رکورد با همون `shenase` موجود هستش. اگه مساوی یا بیشتر از 5 بود، میاد اولیشو (اونی که قدیمی تره) رو پاک میکنه.


$shenase = $_GET['shenase'];
$record = $_GET['record'];

$select_result = mysql_query("SELECT COUNT(*) FROM `table` WHERE `shenase` = '$shenase';");
$count = mysql_fetch_array($select_result);

if( $count[0] >= 5 ){
$delete_result = mysql_query("DELETE FROM `table` WHERE `shenase` = '$shenase' ORDER BY `id` ASC LIMIT 1;");
}

$insert_result = mysql_query("INSERT INTO `table`(`id`,`shenase`,`record`) VALUES(NULL,'$shenase','$record');");


خیییییییییییییییییییییییی ییییییییییییییییییلی ممنون
جواب داد
انشاالله تو این روزها به حاجتتون برسید