امروز پنجشنبه ۱۴۰۰/۰۱/۲۶

2021/04/15 GMT +4:30

» انتخاب ردیف ها با دستور SELECT در MySQL

mysql-select-from

فرآیندهای متداول سیستم های مدیریت پایگاه داده نظیر MySQL شامل چند مورد اصلی ذخیره سازی، بازیابی، به روزرسانی و در نهایت حذف اطلاعات است که در خصوص شیوه ذخیره سازی با دستور INSERT INTO در آموزش گذشته مفصل صحبت کردیم، در این مطلب می خواهیم به بحث بازیابی و انتخاب ردیف ها جهت استفاده از اطلاعات جداول MySQL در برنامه PHP بپردازیم، در دنیای برنامه نویسی ذخیره سازی و نگهداری اطلاعات به خودی خود صرفا یک هدف اولیه محسوب می شود و عمدتا نیازمند این هستیم که از اطلاعات ذخیره شده در شرایط مختلف در برنامه پردازش یا خروجی مورد انتظار داشته باشیم که بدین منظور در هر زبان برنامه نویسی ساز و کاری در نظر گرفته شده است، با ذکر این مقدمه در این آموزش با دستور دیگری از MySQL تحت عنوان SELECT آشنا می شویم که برای انتخاب ردیف های اطلاعاتی (Rows) و انجام پردازش های مورد نیاز در کدهای PHP از آن استفاده می کنیم.

کاربرد دستور SELECT در MySQL


پیش تر گفتیم که صرف ساخت دیتابیس (Database)، جدول (Table)، ستون (Column) و وارد کردن اطلاعات ردیف بندی شده (Rows) در آن تمام کار ما با MySQL نیست، در واقع این فرآیندها جزء مرحله دریافت و نگهداری اطلاعات هستند، اما اگر بخواهیم مجددا از این داده ها در قسمت های مختلف برنامه استفاده کنیم نیاز است که به کمک PHP ردیف های مد نظر را انتخاب (Select) نموده و فراخوانی کنیم، این کار در تعامل بین PHP و MySQL با دستور SELECT و پارامترهای آن انجام می شود که با توجه به نیاز برنامه و تنظیماتی که انجام می دهیم اطلاعات خاصی را از ردیف های موجود در جداول انتخاب و فراخوانی می کند تا پردازش مورد نظر روی آنها صورت گرفته و احتمالا به خروجی ارسال شوند.

شیوه نگارش (Syntax) دستور SELECT در MySQL


شیوه نگارش یا Syntax دستور SELECT در MySQL به صورت نمونه زیر است و به طور معمول همراه با پارامتر FROM استفاده می شود:
SELECT col_1, col_2 FROM tbl
مثال:
//انتخاب ردیف از تمام ستون ها
mysqli_query($conn, "SELECT * FROM table");

//انتخاب ردیف از یک یا چند ستون خاص
mysqli_query($conn, "SELECT id, name FROM table");
توضیح:
- در مورد mysqli_query گفتیم که یک تابع درونی در اکستنشن MySQLi است که جهت اجرای فرآیند پرس و جو بین کدهای PHP و دیتابیس MySQL کاربرد دارد.
- بعد از عبارت SELECT می توانیم از علامت * استفاده کنیم که در اینصورت ردیف های مربوط به تمام ستون ها به عنوان نتیجه پرس و جو انتخاب می شوند، این حالت در شرایطی که صرفا ستون یا ستون های خاصی مد نظرمان باشد مناسب نیست و فشار بیشتری به دیتابیس تحمیل می کند که در برنامه های با تعداد کاربر بالا ممکن است مشکل ساز شود، روش بهینه این است که صرفا نام ستون هایی که اطلاعات آنها مد نظرمان است را پس از عبارت SELECT درج کنیم (جداسازی با کاراکتر کاما ',').
- دستور SELECT FROM با پارامترهای دیگری از جمله WHERE تکمیل می شود که در ادامه سری آموزش های مقدماتی MySQL در این خصوص خواهیم گفت.
- پس از اجرای یک Query با دستور SELECT FROM بر اساس نوع درخواست و تنظیمات ما، مقادیر یا ردیف هایی به عنوان نتیجه پرس و جو برگردانده می شود، این مقادیر می تواند اطلاعات موجود در دیتابیس یا به طور مثال تعداد ردیف های انتخابی باشد.
- برای استفاده از نتیجه پرس و جو بهتر است تابع mysqli_query را به یک متغیر نسبت دهیم تا اطلاعات در ادامه برنامه در متغیر قابل دسترسی و مدیریت باشند، به فرض:
$query = mysqli_query($conn, "SELECT id, name FROM table");
نکته: نمونه کدهای بالا در PHP جنبه کاربردی ندارند و صرفا مرحله انتخاب ردیف ها را شامل می شوند، برای استخراج نتایج برگردانده شده از پرس و جو نیاز به توابع و کدنویسی بیشتری است که در ادامه آموزش حاضر بررسی خواهیم کرد.

پردازش و خروجی با تابع mysqli_fetch_array و متد fetch_array


پس از انتخاب اطلاعات ستون ها با دستور SELECT و نسبت دادن نتیجه برگردانده شده به متغیر، می توانیم با حلقه while در PHP و با کمک تابع mysql_fetch_array (برنامه نویسی رویه ای) یا متد fetch_array (برنامه نویسی شی گرا) مقادیر موجود در متغیر را از حالت آبجکت (Object) به صورت آرایه تبدیل کرده و پردازش مورد نظرمان را روی آنها اعمال یا مقادیر را در خروجی چاپ کنیم، در مثال های زیر از جدول books که در آموزش های قبل ساختیم اطلاعات ستون های book و level را به دو روش برنامه نویسی رویه ای و شی گرا دریافت کرده ایم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");

if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else{    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT book, level FROM books";
    $query = mysqli_query($conn, $sql);
    
    if(!$query){
        echo "Selecting From Table books: Error! " . mysqli_error($conn) . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = mysqli_num_rows($query);
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: rtl; border: 1px solid #999;">';
            
            echo 'تعداد ردیف ها: ' . $count . '<br><br>';

            while($row = mysqli_fetch_array($query)){
                echo 'ردیف ' . $loop . ' => ' .
                'کتاب: ' . $row['book'] . ' - ' .
                'سطح: ' . $row['level'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table books!";
        }
    }
}

//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {   
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT book, level FROM books";
    $query = $conn->query($sql);
    
    if(!$query){
        echo "Selecting Table books: Error! " . $query->error() . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = $query->num_rows;
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: rtl; border: 1px solid #999;">';
            
            echo 'تعداد ردیف ها: ' . $count . '<br><br>';

            while($row = $query->fetch_array()){
                echo 'ردیف ' . $loop . ' => ' .
                'کتاب: ' . $row['book'] . ' - ' .
                'سطح: ' . $row['level'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table books!";
        }
    }
}

//پایان اتصال
$conn->close();
?>
توضیح:
- در این نمونه کدها فرض بر این است که جدول books را با سه ستون id، book و level از قبل ساخته ایم (رجوع به آموزش های گذشته).
- تابع mysqli_num_rows و متد num_rows تعداد ردیف هایی که به عنوان نتیجه پرس و جو انتخاب شده اند را برمی گردانند، اگر این مقدار 0 باشد یعنی هیچ ردیفی مطابق با پرس و جوی ما انتخاب نشده است.
- در صورت موفقت آمیز بودن پرس و جو نتیجه به صورت MySQL Result Object خواهد بود، این آبجکت جهت استفاده در کدهای PHP معمولا باید تبدیل به آرایه شود که در ادامه توضیح خواهیم داد.
- تابع mysqli_fetch_array نتیجه برگردانده شده توسط تابع mysqli_query و متد fetch_array نتیجه برگردانده شده توسط متد query را به آرایه قابل استفاده در PHP تبدیل می کنند.
- آرایه به دست آمده با تابع mysqli_fetch_array یا متد fetch_array با کلید و مقدار در کدهای PHP در دسترس است که در حلقه while می توانیم از ردیف های برگردانده شده خروجی بگیریم.
- در مثال های بالا مقادیر داخل علامت های [ ] در حلقه while نام ستون های جدول دیتابیس هستند که در هر دور حلقه while تا زمانی که کلید و مقداری در آرایه برای خروجی دادن وجود داشته باشد برای هر ردیف انتخاب شده تکرار می شوند.
- برای درک بهتر می توانیم با تابع var_dump در PHP از متغیر row در حلقه while خروجی بگیریم، مثال:
var_dump($row);

array (size=4)
  0 => string 'آموزش HTML' (length=15)
  'book' => string 'آموزش HTML' (length=15)
  1 => string 'مقدماتی' (length=14)
  'level' => string 'مقدماتی' (length=14)
همان طور که مشخص است MySQL نتیجه را هم به صورت کلیدهای عددی و هم رشته ای برمی گرداند که می توانیم از هر دو حالت برای گرفتن خروجی استفاده کنیم، به فرض:
$row['book'];
$row[0];
استفاده از دو شیوه بالا نتیجه یکسان خواهد داشت.
- در حالت شی گرا علاوه بر متد fetch_array می توانیم از متد fetch_assoc نیز استفاده کنیم، عبارت assoc به معنی Associative Array است که در این حالت نتیجه پرس و جو به صورت آرایه ای است که نام ستون ها (رشته متنی) به عنوان کلید آرایه تنظیم شده است، به فرض:
$row['book'];
علاوه بر مواردی که گفته شد شیوه های دیگری نیز برای دریافت نتیجه پرس و جو در حلقه while وجود دارد از جمله استفاده از تابع mysqli_fetch_row و متد fetch_row، تابع mysqli_fetch_object و متد fetch_object که به جهت کاربرد کمتر و جلوگیری از طولانی شدن مبحث در این مرحله به ذکر چند مثال بسنده می کنیم:
$query = mysqli_query($conn, "SELECT book, level FROM books");
while($row = mysqli_fetch_row($query)){
    echo $row[0] . ': ' . $row[1] . '<br>';
}

$query = $conn->query("SELECT book, level FROM books");
while($row = $query->fetch_row()){
    echo $row[0] . ': ' . $row[1] . '<br>';
}

$query = mysqli_query($conn, "SELECT book, level FROM books");
while($row = mysqli_fetch_object($query)){
    echo $obj->book . ': ' . $obj->level . '<br>';
}

$query = $conn->query("SELECT book, level FROM books");
while($obj = $query->fetch_object()){
    echo $obj->book . ': ' . $obj->level . '<br>';
}
نتیجه این پرس و جوهای فرضی می تواند به صورت زیر باشد:
آموزش HTML: مقدماتی
آموزش PHP: پیشرفته
آموزش MySQL: پیشرفته
پرس و جوهای SELECT در MySQL عموما با قسمت WHERE همراه هستند که در مباحث پیش رو در خصوص استفاده از دستور WHERE و پارامترهای آن توضیح خواهیم داد.
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» به روز رسانی ردیف ها در MySQL با UPDATE
» ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
» حذف مقادیر از MySQL با دستور DELETE
» محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
commentنظرات (۶۸ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: علی
۱۵:۱۵ ۱۳۹۳/۰۹/۲۷
لطفا در select شرط برابر بودن محتوای یک textbox را با چند فیلد از جدول در php بگید.
پاسخ: 
لطفا به چند آموزش بعدی از همین قسمت، بخش استفاده از AND و OR مراجعه کنید.
نویسنده: علی
۰۹:۲۱ ۱۳۹۳/۱۰/۲۶
سلام بنده یک جدول دارم و ده ردیف داره من برای این ده ردیف قصد دارم دسترسی قرار بدم مثلا توی ردیف هام خرید کفش را می خوام false کنم و غیر فعال بشه برای یک ردیف می دونم چه دستوری صادر کنم که مقدار true یا false را مشخص کنه می خوام بپرسم میشه تمام این 10 ردیف (که کم یا زیاد میشه) را در یک دستور نوشت که هر وقت تیک هر کدام از درخواست ها را زدم اون ردیف فعال بشه یا خیر باید برای هر ردیف دستور نوشت آیا راهکاری وجود داره اگر داره با چه دستوری و چگونه؟
این نکته را هم بگم ردیف ها کم و زیاد میشن ممنون از سایت بسیار خوبتون منتظر پاسختون هستم
پاسخ: 
راه حل این کار معمولا استفاده از یک ستون INT یکتا برای شماره ID ردیف از نوع AUTO_INCREMENT (افزایش خودکار) است، به این صورت هر ردیف یک ستون برای شماره آی دی دارد که می توان بر اساس آن پرس و جو را نوشت، جهت راهنمایی:
<?php
$id = $_POST['id'];
$query = mysqli_query($conn, "UPDATE tbl SET column = 'false' WHERE id = $id", $con);
?>
نویسنده: Matori73
۰۵:۳۰ ۱۳۹۳/۱۱/۱۰
درود !
جسارتا سوالی داشتم ...
میخوام در سایتم، تعداد کاربرانی که عضو شدن رو نمایش بدم !
برای اینکار میشه راحت تعداد سطر های مربوط به تیبل یوزرها در دیتابیس رو شمارش کرد ...
برای این کار از این تابع استفاده میشه ولی من متوجه نشدم، ممنون میشم مختصر توضیحی در مورد کد php زیر بدید :
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);
$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);
echo "$num_rows Rows\n";
?>
پاسخ: 
کاری که کد شما انجام می دهد انتخاب تمام ردیف های موجود در جدول table1 است که در نهایت با تابع mysql_num_rows، تعداد ردیف ها مشخص می شود، منتها چند نکته را مد نظر داشته باشید:
- اسم جدول باید دقیقا مطابق با اسم جدول موجود در دیتابیس باشد، یعنی جدولی با نام table1 باید در دیتابیس موجود باشد، در مورد سایر قسمت ها از جمله mysql_user و... نیز باید اطلاعات صحیح مطابق با دیتابیس جایگزین این عبارات پیش فرض شده باشند.
- نکته دوم اینکه اگر صرفا هدف شمارش تعداد کاربران است، به جای علامت * در SELECT * FROM (که با این علامت تمام ستون ها انتخاب می شوند)، از نام یک ستون به فرض id استفاده کنید: SELECT id FROM به این صورت از بارگذاری اطلاعات اضافی جلوگیری خواهید کرد.
نویسنده: Matori73
۰۵:۴۶ ۱۳۹۳/۱۱/۱۰
... من در سایتم فایل config.php دارم که اطلاعات دیتابیس در اون هست و یک فایل core.php که فانکشن ها و دستورهای مهم php و ... اونجا فراخوانی میشن !
یعنی فایل config.php در ابتدای فایل core.php فراخوانی شده و نیازی به اتصال مجدد به دیتابیس نیست !
در دیتابیس هم اطلاعات کاربران در تیبل users ثبت میشه که در اون تیبل داده های مختلفی مثل id و تاریخ تولد و ... ذخیره میشه !
چندتا کد برای شمارش تعداد سطرهای تیبل users نوشتم و در قالبم قرار دادم منتها هیچ نتیجه ای نگرفتم، نمیدونم مشکل از کدها هست یا از اتصال به دیتابیس و ..
در این خصوص (قطعه کد مناسب) راهنمایی میخوام ؟
تشکر !
پاسخ: 
ابتدا باید ببینید اطلاعات فایل های مد نظر در بخش قالب سایت در دسترس هستند یا خیر، در برخی سیستم های مدیریت محتوا برای دسترسی به توابع اتصال به دیتابیس روش های خاصی وجود دارد و صرف قرار دادن کدها در فایل قالب تاثیری ندارد، در مجموع بدون تست و بررسی نمی توان گفت که مشکل از کدام قسمت (تابع اتصال، اطلاعات اتصال، کد استفاده شده، عدم دسترسی به تابع اتصال در قسمت قالب و...) است!
نکته: روش هایی برای خطایابی وجود دارد، از جمله استفاده از تابع نمایش خطا در MySQL
mysql_error();
که در بخش های مقدماتی آموزش داده شده.
نویسنده: masoud
۱۲:۳۶ ۱۳۹۳/۱۱/۱۰
سلام و خسته نباشید
من میخوام یه کاربر هنگام ثبت نام نتونه با ایمیل تکراری کار کنه باید if رو نوشت
حذف شد
پاسخ: 
بله اما نه به صورتی که نوشتید، باید یک پرس وجو بنویسید و ایمیل مورد نظر را در دیتابیس انتخاب کنید، سپس با توابعی مانند
mysql_num_rows
تعداد ردیف های به دست آماده را حساب کنید، اگر از صفر بیشتر بود، یعنی این ایمیل در دیتابیس وجود دارد (لطفا به آموزش های مقدماتی + نمونه های موجود در آموزش های کاربردی مراجعه کنید).
نویسنده: محمد
۱۶:۱۹ ۱۳۹۳/۱۱/۱۹
سلام
فرض کنید من یک دیتابیس دارم داخل اون دیتابیس چند تا جدول دارم که طرف حساب من جدول type هست (نام جدول)
داخل جدول type چهار تا ستون دارم به نام های :
id, name, city, family
اول از همه بگم وقتی کاربر فرم عضویت رو پر می کنه همه ی اطلاعات داخل این جدول (type) ذخیره میشه حالا من می خوام مثلا اگه کاربر با name به عنوان مثال ali وارد شد
اول بیاد در ستون name نام طرف رو چک کنه (یعنی ali رو چک کنه) و اون کاربرهایی که نام شهر ها (city) شون یکی هست و برا ali نشون بده!
همه کاراشو انجام دادم فقط همین نمایش اطلاعات از دیتابیس رو نتوسنتم انجام بدم.
پاسخ: 
به دو روش می توانید به هدفتان دست پیدا کنید:
- راه حل ساده تر این است که ابتدا یک پرس و جو با SELECT بنویسید و city را از جدول type انتخاب کنید که name آن برابر ali باشد.
SELECT city FROM type WHERE name = 'ali' LIMIT 1
سپس در ادامه کدهای PHP یک پرس و جوی دیگر بنویسید و تمام کاربرانی که شهر آنها برابر شهر علی هستند را انتخاب کنید.
SELECT name FROM type WHERE city = '$user_city'
لطفا توجه کنید که ما فقط بخش اصلی و چارچوب کار را جهت نمونه گفتیم، مسلما برای یک برنامه کاربردی باید کدنویسی PHP بلد باشید و بتوانید پرس و جوها را بنویسید و به فرض در حلقه while (در مباحث مقدماتی آموزش آن وجود دارد) خروجی دریافت، به متغیرها نسبت داده و بسته به نیاز در پرس و جوها از آنها استفاده کنید.
- روش دیگر استفاده از JOIN و نوشتن پرس و جوی ترکیبی است که خود مبحث مفصلی دارد (در عمل تفاوتی بین این روش ها نیست، فقط روش اخیر دو پرس و جو را در یک پرس و جو ترکیب می کند).
نویسنده: محمد
۱۹:۲۴ ۱۳۹۳/۱۱/۱۹
سلام چطوری می تونم از ذخیره شدن کدهای اچ تی ام ال در پایگاه داده اون زمانی که فرم ارسال میشه جلوگیری کنم؟
یعنی مثلا داخل فرم وارد شده :
<b>تست</b>
اون تگ های b رو خودش به صورت خودکار از بین ببره!
پاسخ: 
می توانید از تابع
strip_tags();
استفاده کنید.
http://php.net/strip_tags
نویسنده: محمد
۱۵:۴۲ ۱۳۹۳/۱۱/۲۰
سلام و خسته نباشید
آیا اطلاعات و از توی دیتابیس میشه اینطوری نمایش داد؟
فرض کنید من یه جدول به نام post دارم.
داخل این جدول 4 تا ستون دارم!
اینا : id, name, text, url
می خوام اینطوری نمایش بده :
بیاد داخل جدول post بگرده و هر کدوم از جداول که id و url شون با هم برابر (مساوی) بود text اونو نمایش بده!
چنین چیزی امکان داره؟
راستی ممنون بابت پیگیری و پاسخ به سوالات!
ایام پیروزی انقلاب اسلامی ایران بر شما مبارک
پاسخ: 
برای انتخاب نتایج از جدول MySQL بر اساس برابری مقادیر ستون های دیگر می توانید از علانت <=> استفاده کنید، مثال:
"SELECT text FROM post WHERE `id` <=> `url`";
نویسنده: محمد
۲۱:۵۶ ۱۳۹۳/۱۱/۲۳
سلام
یه سوال اساسی چرا وقتی با دستور LIKE یک جدولی رو فراخونی می کنیم اطلاعات رو یکی کمتر از تعداد جداول نشون می ده؟
یعنی اگه من 5 تا اطلاعات داخل جداول داشته باشم فقط 4 تاش نشون داده میشه و یکیش نشون داده نمی شه
اونی که نشون داده نمی شه همون اولی هست.
گزینه های :
a
b
c
d
می خوام همش با LIKE نمایش بده ولی میاد اینطوری نمایش می ده :
b
c
d
اگه میشه یه راهنمایی کنید باید چیکار کنم.
پاسخ: 
مشخص نیست چه اطلاعاتی در دیتابیس ذخیره شده و همچنین چگونه از LIKE استفاده می کنید، استفاده از LIKE حالت های متفاوتی دارد که با علامت % در ابتدا و انتها، کارکرد آن تغییر می کند، در هر صورت بدون تست پرس و جوی شما نمی توان پاسخ روشنی ارائه کرد.
نویسنده: shoku
۱۰:۲۹ ۱۳۹۴/۰۲/۱۶
سلام
دو تا جدول دارم و از کاربر ورودی میگیرم اگه 1 رو انتخاب کرد از جدول a و 2 رو انتخاب کرد از جدول b اطلاعات رو بخونه
ممنون میشم راهنماییم کنین
پاسخ: 
پاسخ شما در سوالتان وجود دارد! ساده ترین روش این است که با دستورات شرطی مقادیر دریافت شده کاربر را مقایسه و متناسب با ورودی، برای نام جدول در یک متغیر مقادیر متناظر تعریف کنید، در واقع به نظر مشکل بیشتر به عدم آشنایی شما با مباحث مقدماتی PHP و کدنویسی داینامیک مربوط می شود تا کار با دیتابیس که تنها راه رفع آن نیز مطالعه و تمرین از مقدمات است!
نویسنده: معصومه
۰۱:۲۴ ۱۳۹۴/۰۴/۰۲
با سلام. سوال من یکم فراتر از این موضوعه...
من میخوام یه ایدی رو چک کنه از جدول 1 که اگه وجود داشت اطلاعات داخل فرم را داخل جدول 2 ذخیره کنه
خیلی مشکل دارم اگه میشه راهنماییی ام کنید با تشکر
پاسخ: 
برای این کار می توانید از نمونه پرس و جوی زیر استفاده کنید:
INSERT INTO table_1(column_1, column_2) SELECT 'value_1', 'value_2' FROM table_2 WHERE EXISTS(SELECT 1 FROM table_2 WHERE id = 'id') LIMIT 1
نکته: مقادیر value ها می تواند هرچیزی باشد و ارتباطی به نام ستون های جدول دوم ندارد، id می تواند به صورت داینامیک در پرس و جو جایگذاری شود.
نویسنده: علی رضا
۰۹:۲۰ ۱۳۹۴/۰۴/۱۴
سلام
استفاده از LIKE بجای = باعث استفاده بیشتر از پردازنده های سرور می شود ؟
اگر بجای
$name = mysql_query("SELECT * FROM table WHERE user = 'your name'");
از
$name = mysql_query("SELECT * FROM table WHERE user LIKE '%your name%' ");
استفاده شود این کد نویسی بهینه است ؟ یا ایراد محسوب می شود ؟
فرض کنید برای مثال بخواهیم آی دی تمام صفحات سایت که قرار است به شیوه = انتخاب شود از LIKE استفاده کنیم.
(البته چون به این شیوه نیازمند هستیم با توجه به نیازمان)
با تشکر
پاسخ: 
اگر بخواهیم خیلی دقیق صحبت کنیم، قاعدتا استفاده از LIKE در مقایسه با = نیاز به پردازش بیشتر و در نتیجه کاهش سرعت (هرچند خیلی ناچیز و مختصر) دارد، اما اگر واقعا هیچ راهی برای اجتناب از این کار وجود ندارد، نگرانی نیز از بابت استفاده از LIKE نیست، این دستور جزء دستورات استاندارد MySQL است و در صورتی که قدرت سرور شما متناسب با میزان اطلاعات و نوع پرس و جوهای دیتابیستان باشد، در اغلب موارد هیچ مشکل محسوسی رخ نخواهد داد، البته کدنویسی بهینه یعنی تا حد امکان طوری برنامه خود را طراحی کنیم که برای رسیدن به نتیجه، حداقل اطلاعات پردازش شوند که این در MySQL صرفا به LIKE محدود نمی شود، بلکه تعریف مناسب ساختار دیتابیس، محدود کردن انتخاب ردیف ها با نوشتن نام آنها در پرس و جو، تعیین LIMIT و... را شامل می شود.
نویسنده: سعيد
۰۰:۲۵ ۱۳۹۴/۰۵/۱۴
سلام مى خواستم بدونم چطور مى تونم از یک tabel فقط اطلاعات مربوط به یک سطر خاص رو با استفاده از id يا كليد اون بخونم و در جدول نمايش بدم ممنون اگه میشه كد php اونو بگيد.
پاسخ: 
در آموزش حاضر، قسمت "نمایش اطلاعات با mysql_fetch_array" را ملاحظه کنید، کافی است در بخش SELECT * FROM به جای علامت > از = استفاده کنید!
نویسنده: مریم
۲۲:۳۷ ۱۳۹۴/۰۵/۱۸
سلام... اگر میشه راهنماییم کنید چطور می تونم بعد از گرفتن مقدار یک textbox از دستور select استفاده کنم و فیلدهای مرتبط با آن textbox را نمایش دهم؟
پاسخ: 
می توانید مقدار دریافتی را به یک متغیر نسب داده و (پس از فرایند ایمن سازی) متغیر را درون پرس و جوی خود استفاده کنید، مثال:
$value = mysql_real_escape_string($_POST['input_name']);
$query = mysql_query("SELECT * FROM tbl_name WHERE some_col = $value");
قاعدتا باید با نحوه کاربرد mysql_fetch_array نیز آشنایی داشته باشید.
نکته: اکستنشن MySQL قدیمی و منسوخ شده است، توصیه می کنیم از اکستنش MySQLi یا PDO استفاده کنید.
نویسنده: احد
۱۲:۱۳ ۱۳۹۴/۰۵/۲۶
با سلام و خسته نباشید.
دوست عزیز ممنون از راهنماییتون. من از متد post در form استفاده کردم، اما با کلیک بر روی هر کدام از یافته ها این متد اخرین رکورد یافت شده توسط حلقه رو به من بر می گردونه در حالی که من می خوام همون رکوردی که روی اون کلیک می کنم و برگردونه. ممنون می شم راهنمایی جامعی بفرمایید و اگر امکانش هست یک مثال عملی ساده هم برام بیاورید. از زحمات شما کمال تشکر رو دارم
پاسخ: 
باید به دو نکته توجه داشته باشید:
- یک پارامتر یکتا (به طور مثال ID) را از طریق آدرس URL به سرور ارسال کنید:
http://yoursite.com/index.php?id=1
- از این پارامتر در پرس و جوی خود (دستور SELECT) استفاده کنید تا فقط همان ردیف خاص انتخاب شود:
$id = $_GET['id'];
SELECT * FROM tbl_name WHERE some_col = $id LIMIT 1
نکته: با توجه به اکستنشنی که از آن استفاده می کنید (MySQL, MySQLi, PDO) باید فرآیند ایمن سازی دیتابیس را نیز انجام دهید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





5 × 4
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form شریفی
در:
سلام مجدد. من یه سوال خیلی تخصصی دارم. ممنون میشم پاسخ بدین. برای پروژه پایان نامه. دارم روی موتورهای جستجوگر تحقیق میکنم. فرض...
۱۴۰۰/۰۱/۲۵

form شریفی
در:
سلام استاد. من از متد file_get_contents استفاده می کنم برای دریافت اطلاعات از سایت های مختلف. بعضی وقتها سایت ها دیر لود میشه. آیا...
۱۴۰۰/۰۱/۲۵

form hh
در:
سلام خدمت شما بنده یه سوال داشتم تمام مراحل شما رو انجام دادم و نتیجه گرفتم و لازمه یه تشکرم بکنم. وبسایت من،...
۱۴۰۰/۰۱/۲۵

form erfan
در:
سلام من واسه یه دکمه یه محتوایی تعریف کردم که وقتی کلیک شد محتوا رو نشون بده اما تو دوجاش موندم یک اینکه چیکار کنم...
۱۴۰۰/۰۱/۲۱

form mahdi
در:
سلام استاد عزیز ، بازم معذرت میخوام سوالام زیاد شد ولی همشون در یک موضوع هستن ، تونستم که با این روش برای هر اسلایدر...
۱۴۰۰/۰۱/۱۸

form mahdi
در:
سلام استاد عزیز عذر میخوام بار سومه پیام میزارم ، مشکلش از ست اینترول بود که قطع نمیشد و با هم تداخل داشتند ولی بدون...
۱۴۰۰/۰۱/۱۸

form mahdi
در:
سلام وقت بخیر استاد عزیز ، یک تابع رو چطور میشه در جاوا اسکریپت اورراید کرد؟ که مثلا با هر فراخوانی مجدد ، قبلی ها...
۱۴۰۰/۰۱/۱۸

form متین
در:
سلام چجوری برای خود صفحه ادرس بسازیم که سایتی که رو ساختیم رو با دستگاه دیگه پیداش کنیم
۱۴۰۰/۰۱/۱۶

form امیرحسین برزویی
در:
من یک وبلاگ دارم و 9 سالمه من در وبلاگم مداحی می گذارم ولی وقتی قاب گذاشتم از این سایت من دیگه فیلم...
۱۴۰۰/۰۱/۱۶

form بنده خدا
در:
سلام خسته نباشین، خدا قوت. یه سوال دارم. چرا در بخش نظردهی وبلاگ به جای عنوان پست می نویسه مطلب مورد نظر یافت نشد؟!...
۱۴۰۰/۰۱/۱۵

form روح الله
در:
موقعی میخواهم وارد سایت ایران خودرو بشم پیام میده از Ip داخلی استفاده کنید دلیلش چیست
۱۴۰۰/۰۱/۱۴

form غریب
در:
تشکر از شما مشکلم حل شد امیدوارم موفق و پیروز باشید هر جا که هستید
۱۴۰۰/۰۱/۱۱

form غریب
در:
سلام مجدد ممنون و تشکر از کمکتون کد به خوبی کار میکنه اما همچنان من مشکلی دارم که حل نتونستم کنم...
۱۴۰۰/۰۱/۱۰

form غریب
در:
سلام مجدد این کدی که دادید خوب هست ولی من بد و ناقص توضیح دادم توجه کنید کد این هست تقریبا ممنون...
۱۴۰۰/۰۱/۱۰

form غریب
در:
سلام خسته نباشید من کدی دارم که میخوام داخل یه بخشیش نتیجه یه رویداد رو فراخوانی کنم و راهش و نمیدونم اگر میشه کمک...
۱۴۰۰/۰۱/۱۰

form محسن
در:
سلام ، سوال من مربوط به پنل کارگزاری هاست ، وقتی اسم یک سهم (نماد) را در قسمت جست و جو سرچ میکنم...
۱۴۰۰/۰۱/۰۸

form ترجمه
در:
باسلام همه صفحات من دارای دو url می باشد که یکی با حروف کوچک است و دیگری با حروف بزرگ چجوری این مشکل را...
۱۴۰۰/۰۱/۰۸

form سهیل ملکی
در:
سلام خسته نباشید ببخشید من میخوام از تابع navigator.online توی جاوا اسکریپت استفاده کنم تا باهاش بفهمم کاربر آنلاین هست یا نه و اگه بود...
۱۴۰۰/۰۱/۰۴

form Rabbiten
در:
سلام. من چند ماه است که دنبال کد استایل تصویر مثل تبلیغات بالای سایت شما هستم. اما هیچ جا پیدایش نمی کنم. لطف می...
۱۴۰۰/۰۱/۰۱

form mahdi
در:
سلام استاد عزیز سال نو رو تبریک میگم بهتون ، امیدوارم که خودتون و خانوادتون همیشه سالم و سلامت باشید و امسال پر از...
۱۳۹۹/۱۲/۳۰

form korosh abbasy
در:
سلام وقت بخیر ببخشید در مورد این مطلب سوالی پرسیدم شما در مورد output buffering توضیح دادید کد کار نمیکنه میخواستم ببینم نیازی هست من...
۱۳۹۹/۱۲/۲۹

form احمد
در:
سلام مجدد عذرخواهی میکنم یه موردی دیگه بود فراموش کردم در مورد سوال هدر بگم اینکه روی لوکال به هدر ارسال میشه ولی روی هاست...
۱۳۹۹/۱۲/۲۸

form احمد
در:
با سلام خسته نباشید ببخشید قبلا یه سری دستورات جی کوری رو از خودتون گرفتم وقتی فیلدهای فرمم تکمیل شده است توسط هدر بره به...
۱۳۹۹/۱۲/۲۸

form korosh abbasy
در:
سلام دم شما گرم این دستور برای خوندن فایل هم استفاده میشه؟ من میخوام دسترسی تعیین کنم که اگر یک متغییر true...
۱۳۹۹/۱۲/۲۷
  در انتظار بررسی: ۱
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.