PDA

View Full Version : مشکل در sql کمک لطفا



DelDard
پنج شنبه 27 شهریور 1393, 10:59 صبح
سلام دوستان
من تو سایتم همونطور که تو کد زیر میبینید برای این که تک تک کابران رو مشخصاتشون رو پرینت کنم از ستون id اون ها رو دونه دونه مشخصاتش رو میگیرم و اکو میکنم


for ($id=$rows - $num; $id>$x ; $id--){
$sql = "SELECT * FROM members WHERE id = '$id'";
$result = $obj->query_mysql($sql);
$users = $obj->array_mysql($result);

$id2 = $users['id'];
$date = $users['date'];
$gender = $users['gender'];
$name = dec($users['name']);
$family = dec($users['family']);
$phone = dec($users['phone']);
$email = dec($users['email']);


خوب تا اینجا مشگلی نیست چون id ها به ترتیب از 1 شوع میشه و میره بالا و الان همه چی رو درست نشون میده ولی وقتی من یکی از سطر های تیبلم رو پاک کنم که طبیعتا id اون هم پاک میشه اون وقت به دو مشکل میخورم
یک: اون سطری که پاک شده باز نشون داده میشه ولی خالی . مثلا اگه id ها 1 2 3 4 5 6 بوده ومن 3 رو پاک کردم به جای نشون دادن 1 2 4 5 6 بهم نشون میده 1 2 'یک سطر خالی' 4 5 6.
دو: اخرین سطر رو که پاک هم نشده بهم نشون نمیده

دوستان البته من حدود 6 ماهه php کار نکردم و برخی چیز ها یادم رفته
ممنون میشم کمک کنید

DelDard
پنج شنبه 27 شهریور 1393, 11:19 صبح
دوستان من یک بار دیگه کدم رو خوندم و دقت کردم دیدم مشکل حل میشه اگه id ها به صورت پشت سر هم و به ترتیب باشند یعنی اگر ما id چهار رو پاک کردیم id های 1 2 و 3 تعیر نکند ولی 5 بشه 4 و 6 بشه 5. متوجه منظورم شدین؟
یعنی بجای اینکه بعد از پاک کردن 4 ما داشته باشیم 12356 داشته باشیم 12345.
حالا با چه کدی من باید این دستور رو بدم که وقتی یکی پاک شد ترتیب id ها حفظ بشه؟؟؟؟؟؟؟؟؟

با تشکر

saeed-71
پنج شنبه 27 شهریور 1393, 12:49 عصر
من خودم از لیمیت استفاده میکنم.البته بتگی داره چنتا رکورد ثبت شده داشته باشی.فک نکنم با لیمیت هم تو سرعتت زیاد تاثیر بذاره.

DelDard
پنج شنبه 27 شهریور 1393, 13:10 عصر
منون عزیز
البته من خیلی وقته از میادین به دورم لذا 2هزاریم کجه :) میشه یه مثال بزنی با همین لیمیت؟
دقیقا چطور و کجا از لیمیت استفاده کنم؟
ضمنا تعداد کاربرا ممکنه در اینده به چند هزار تا هم برسه از لحاظ سرعت مشکلی نیست؟
تشکر

saeed-71
پنج شنبه 27 شهریور 1393, 13:51 عصر
توی قسمت 9 تا 13 این ویدیو اموزش داده شده.
www.php-pro.ir/edu

اینم نمونه کد


if($start!=NULL && $end!=NULL){ $limit="LIMIT $start,$end"; }
$res = $this->connection->prepare("SELECT * FROM `carinfo` WHERE (1=1 $sql) ORDER BY `id` DESC $limit ");

Unique
پنج شنبه 27 شهریور 1393, 14:15 عصر
سلام

شرمنده این را میگم ها ! اما شما واقعا فقط شش ماهه php کار نکردین یا کلا با Database و برنامه نویسی میونه ای ندارین ؟

کاری که شما داری میکنی از نظر کدنویسی یک حماقت (شرمنده کلمه ای متناسب و مودبانه پیدا نکردم و قصد خیر است دوست عزیز) و از نظر پایگاه داده یک سیل روان به سوی پایگاه هستش (حالا مودبانه تر شد).

شما باید با sql دستور زیر را بزنید :
select * from members

وبعدش توی رکورد های دریافتی یک while بنویسی ، اینطوری : (من با mysqli مثال میزنم چون mysql بزودی دیگر پشتیباین نخواهد شد)


$db = new mysqli('localhost', 'user', 'pass', 'demo');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$result = $db->query("select * from members");
$cnt = 1;
while($row = $result->fetch_assoc()){
echo $cnt."<br />";
echo $row['name'] . '<br />';
echo $row['family'] . '<br />';
etc ...
$cnt += 1;
}
$result->free();
$db->close();

شما اصلا نیازی نیست دونه دونه این کار را بکنی ! برای Paging هم از باید از Limit استفاده کنی که توی انجمن کلی مثال زده شده. دنبال صفحه بندی و pageing بگرد. چند تا روش داره.

DelDard
پنج شنبه 27 شهریور 1393, 15:18 عصر
ممنون سعید جان با همین کد هر دو مشکلم حل میشه :) دستت درد نکنه
یونیک عزیز از روش شما استفاده میکنم چون با روش خودم زیاد طول میکشه. ممنون بابتش. ضمنا mysqli اگه بخام استفاده کنم باید تمام کدهایی که تا الان نوشتم رو عوض کنم؟ ببین من برای دیتابیسم از ی کلاس اماده استفاده میکنم . باید هر چی کد با این نوشتم رو تغیر بدم یا فقط همین کلاس رو به mysqli بنویسم؟
کلاسم اینجا http://i-scored.net/SQLManager.class%20-%20Copy.zip گذاشتم برات یه نگاه کن لطفا ببین اگه بخام از mysqli استفاده کنم باید کجاشو تغیر بدم؟ و اگه خودت یه کلاس مثل این تو mysqli بهم لینک بدی ممنون میشم ازت
تشکر

Unique
پنج شنبه 27 شهریور 1393, 21:16 عصر
در مورد mysql که سوال خصوصی پرسیده بودین باید عرض کنم اگه یک نگاه به این صفحه (http://php.net/manual/en/function.mysql-connect.php) بندازید متوجه یک warning میشید :

Warning
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used.


من برای دیتابیسم از ی کلاس اماده استفاده میکنم . باید هر چی کد با این نوشتم رو تغیر بدم یا فقط همین کلاس رو به mysqli بنویسم؟
شما میتونید فقط همین کلاس را با mysqli دوباره نوسی کنید ! کار اصلا سختی نباید باشه ! ولی شرمنده بنده اصلا وقتش را ندارم. mysql را هم بهتره به صورت object oriented استفاده کنید تا functional (نظر کاملا شخصی). توضیح : mysqli هم توابع شبیه به Mysql داره و هم به صورت کلاس و شی گرایی کار میکنه !

موفق باشین.