article

آموزش MySQL، سیستم مدیریت پایگاه داده

mysql

ذخیره اطلاعات به صورت دسته بندی شده و دسترسی سریع به آنها ضرورتی بود که باعث ایجاد سیستم های مدیریت پایگاه داده رابطه ای (Relational Database Management System یا به اختصار RDBMS) در دنیای برنامه نویسی و به تبع برنامه نویسی وب شد، اگر یک برنامه نویس PHP باشیم و بخواهیم به طور مثال سرویس فرهنگ لغات آنلاین طراحی کنیم، قاعدتا اولین مشکلی که با آن روبرو خواهیم شد این است که لغات را در کجا ذخیره و چگونه آنها را فراخوانی کنیم، چگونه کلمه مورد نظر کاربر را از بین کلمات موجود جستجو کرده و نتیجه را پس از پردازش به صفحه مرورگر ارسال نمائیم و سوالاتی از این دست، لذا ناگزیر بحث استفاده از یک سیستم مدیریت پایگاه داده جهت ذخیره، جستجو، انتخاب، ویرایش و حذف اطلاعات مطرح می شود که در وب و بخصوص برای برنامه نویسان PHP اولین و شاید بهترین انتخاب MySQL باشد، اینکه چرا و چگونه از MySQL در کدنویسی PHP خود استفاده کنیم، مبحثی است که در سلسله آموزش های مقدماتی پیش رو به آن خواهیم پرداخت.

MySQL چیست و چه کاربردی دارد؟


قبل از هر چیز بهتر است به این سوال پاسخ دهیم که MySQL چیست و چه کاربردی دارد؟ در پاسخ می توان گفت که MySQL یکی از پرکاربردترین سیستم های متن باز (Open-source) مدیریت پایگاه داده است که توسط شرکت سوئدی MySQL AB ایجاد و اولین نسخه آن در سال 1995 معرفی شد (مالکیت شرکت MySQL AB در حال حاضر در اختیار شرکت Oracle است)، SQL در واقع زبانی است که برای استفاده در سیستم های مدیریت پایگاه داده رابطه ای (RDBMS) طراحی شده و عبارت MySQL اشاره به این زبان دارد، در واقع MySQL برای اجرای دستورات ما مانند دستور ساخت جدول، ذخیره، جستجو، انتخاب، ویرایش و حذف اطلاعات از زبان SQL استفاده می کند و لذا آشنایی قبلی با SQL می تواند فراگیری کار با MySQL را بیش از پیش ساده کند، از آنجایی که این سیستم مدیریت پایگاه داده جزئی از خانواده موسوم به LAMP (مخفف Linux, Apache, MySQL, Perl/PHP/Python) است لذا بیشترین سازگاری و کارایی را در این حیطه دارد و انتخاب اول برنامه نویسان PHP به حساب می آید، با MySQL می توانیم اطلاعات مورد نظر را در دیتابیسی که در سرور ایجاد می کنیم ذخیره کرده آنها را بر طبق اهداف برنامه به صورت حرفه ای دسته بندی و هر زمان نیاز بود در اطلاعات جستجو نموده و مقادیر دلخواه را استخراج نمائیم، این قابلیت ها برای طراحی برنامه های داینامیک وب جزء ملزومات اولیه هستند و MySQL به خوبی این نیازها را پوشش می دهد، استفاده سایت های معروفی مانند Google، Facebook، Twitter، Flicker و YouTube از این پایگاه داده نشان دهنده حرفه ای و کارآمد بودن آن است.

ساختار کلی و نحوه دسته بندی اطلاعات در پایگاه داده


همان طور که اشاره شد پایگاه داده جزء کلیدی در برنامه های کاربردی تحت وب محسوب می شود و لذا شناخت ساختار کلی و نحوه دسته بندی اطلاعات در آن اهمیت ویژه ای دارد، در MySQL هر پایگاه داده (Database) یک نام بخصوص دارد و حداقل از یک جدول (Table) اطلاعاتی تشکیل شده است، جداول نیز خود شامل زیر مجموعه هایی هستند که به آنها ستون (Column) می گویند که سطرح های اطلاعات (Rows) را در خود جای می دهند، به طور مثال دیتابیس زبان های برنامه نویسی می تواند شامل جدول برنامه نویسی دسکتاپ، برنامه نویسی موبایل و برنامه نویسی وب باشد، به همین صورت هر جدول می تواند شامل ستون (Column) و سطرها (Rows) باشد، سطرح ها در واقع همان ردیف های اطلاعات هستند که در جدول برای هر ستون ذخیره می شوند (تصویر زیر):
MySQL Database Structure
در نمونه ساختار فوق programming نام دیتابیس، desktop نام جدول و id، name و status ستون های دیتابیس هستند که سطرح های اطلاعاتی را شامل می شوند (نام دیتابیس، جدول و ستون ها در مثال فرضی و به تعداد دلخواه می باشند).

مدیریت پایگاه داده MySQL با phpMyAdmin


برنامه نویسان PHP معمولا از دو طریق می توانند به سیستم مدیریت پایگاه داده MySQL دسترسی داشته باشند، با استفاده از برنامه phpMyAdmin و همچنین با کدنویسی PHP، برنامه phpMyAdmin جهت مدیریت به اصطلاح دستی MySQL و اعمال تغییراتی مانند ساخت پایگاه داده جدید، ساخت جداول، ستون ها، تغییر ویژگی های جداول و ستون ها و مواردی از این دست کاربرد دارد و تقریبا هر کاربری با هر سطح از آشنایی با برنامه نویسی می تواند با محیط آن ارتباط برقرار کرده و نیازهای خود را مرتفع کند، phpMyAdmin در واقع برنامه ای نوشته شده به PHP با هدف مدیریت پایگاه داده با استفاده از رابط کاربری ساده و تحت مرورگر است تا هم انجام موارد اولیه، برپایی پایگاه داده و اعمال تغییرات بعدی در آن آسان و روند کار تسریع شود و هم کاربران مختلف با هر سطح از آشنایی با PHP بتوانند بدون دغدغه و احیانا نگرانی از سردرگمی، با محیط MySQL ارتباط برقرار کنند، به هر صورت برای آشنایی بیشتر می توانیم به سایت مرجع این برنامه مراجعه کنیم:
https://www.phpmyadmin.net
همچنین می توانیم با پیش نمایشی از این برنامه در آدرس زیر کار کنیم که برای شروع امکان بسیار خوبی است:
https://demo.phpmyadmin.net/master-config
یادآور می شویم که این برنامه معمولا به صورت از پیش نصب شده در سرورهای لینوکس یا برنامه های سرور مجازی (Localhost) وجود دارد و کافی است از پنل مدیریت هاست سایت یا از طریق آدرس 
localhost/phpmyadmin
در لوکال به آن دسترسی پیدا کنیم، در برنامه های سرور مجازی معمولا با نام کاربری root و بدون پسورد می توانیم وارد محیط برنامه phpMyAdmin شویم.

ارتباط PHP با پایگاه داده MySQL


همان طور که اشاره شد با کدنویسی PHP می توانیم به پایگاه داده MySQL دسترسی داشته و بین کدهای PHP با سیستم مدیریت پایگاه داده MySQL ارتباط برقرار کنیم، این قابلیت باعث می شود بتوانیم برنامه های حرفه ای تحت وب که معمولا نیازمند نگهداری داده ها در یک بانک اطلاعاتی مطمئن هستند را طراحی و عملیاتی از قبیل ذخیره سازی، دسته بندی، جستجو، انتخاب، ویرایش و حذف ردیف ها را به صورت سیستماتیک و با کمک دستورات برنامه نویسی انجام دهیم، به طور مثال کاربر می تواند در فیلد جستجوی برنامه تحت وب عبارت مورد نظر خود را وارد کرده و ما با دستورات PHP به MySQL می گوییم که ردیف های متناسب با کلمه درخواستی کاربر را انتخاب و به عنوان نتیجه به مفسر PHP برگرداند، در ادامه نتیجه دریافتی را با کدنویسی PHP تجزیه تحلیل نموده و خروجی نهایی را مطابق هدف برنامه به کاربر نشان دهیم، این ارتباط با کمک برنامه هایی تحت عنوان اکستنشن (Extension) صورت می گیرد، اکستنش ها در واقع بسته های نرم افزاری هستند که به هسته PHP امکان انجام عملیات های خاص مانند اتصال و مدیریت پایگاه داده را می دهند، در PHP برای این منظور پیشتر از اکستنشن قدیمی MySQL استفاده می شد که در نسخه 7 PHP منسوخ و به صورت پیش فرض حذف شده است و توصیه می شود برای برنامه های جدید اکستنشن MySQLi یا PDO را جایگزین آن نمائیم.
نکته: سیستم مدیریت پایگاه داده MySQL با اکستنشن MySQL دو عبارت مجزا هستند!
       PHP <===> MySQL
- MySQL (Deprecated - منسوخ شده)
- MySQLi (Recommended - توصیه شده)
- PDO (Recommended - توصیه شده)

چرا از اکستنشن MySQLi یا PDO استفاده کنیم؟


اکستنشن MySQLi (حرف i پایانی مخفف improved) نسخه بهبود یافته از اکستنشن MySQL بوده و شیوه نگارش دستورات آن در حالت برنامه نویسی رویه ای شباهت زیادی به شیوه نگارش دستورات MySQL دارد، همچنین MySQLi اکستنشن اختصاصی PHP برای کار با سیستم مدیریت پایگاه داده MySQL بوده و بیشترین سازگاری را با امکانات آن دارد، با توجه به این دلایل در آموزش های پیش رو از این اکستنشن در مثال ها استفاده خواهیم کرد، PDO (مخفف PHP Data Objects) اکستنشن دیگری است که می تواند جایگزین MySQL شود، PDO اکستنشن غیراختصاصی PHP برای کار با پایگاه داده و از جمله پایگاه داده MySQL است، این اکستنشن در مقایسه با MySQLi سازگاری کمتری با امکانات سیستم مدیریت پایگاه داده MySQL دارد اما به لحاظ حجم کم (Lightweight)، حرفه ای بودن و امکان کار با سیستم های مختلف پایگاه داده می تواند در برنامه های تحت وب گزینه مناسبی باشد، توسعه دهندگان PHP در نسخه های جدید استفاده از اکستنشن MySQL را توصیه نمی کنند و آن را به حالت Deprecated درآورده اند که یعنی استفاده از آن توصیه نمی شود و حتی از نسخه PHP 7 به بعد دیگر این اکستنشن در مفسر PHP به صورت پیش فرض وجود ندارد، دلیل این موضوع رشد امکانات و قابلیت های PHP در طی سالیان گذشته و قدیمی شدن اکستنشن MySQL در طی این فرآیند است، همچنین قابلیت های زیادی به سیستم مدیریت پایگاه داده MySQL اضافه شده است که با اکستنشن قدیمی MySQL امکان استفاده بهینه از آنها وجود ندارد، به طور مثال در بخش حفظ امنیت برنامه های نوشته شده به زبان PHP استفاده از این اکستنشن باید با دقت و تسلط کافی صورت گیرد تا با حملات موسوم به SQL Injection روبرو نشویم که این با هدف استفاده همگان از PHP در تضاد است و در اکستنشن های جدید (MySQLi و PDO) امنیت کدهای PHP به شکل محسوسی بهبود یافته، همچنین نگهداری فنی و ایجاد تغییرات بعدی در برنامه های نوشته شده با اکستنشن MySQL در مقایسه با اکستنشن های جدید به نسبت زمانبر و حساستر است.
نکته: در طراحی ساختار برنامه ها می توانیم با جدا کردن بخش اجرای پرس و جوهای دیتابیس، امکانی در نظر بگیریم که کاربر به دلخواه خود اکستنشن مورد نظر را انتخاب کند، قاعدتا این کار صرفا جنبه تزئینی ندارد و در مواردی که یک اکستشن به هر دلیل کارایی ندارد می تواند راهگشا باشد.

پشتیبانی MySQLi از برنامه نویسی رویه ای و شی گرا


اکستنشن MySQLi از دو شیوه برنامه نویسی رویه ای (Procedural) و شی گرا (Object-oriented) پشتیبانی می کند، در این سری از آموزش ها نمونه کدها هم به شیوه رویه ای و هم به شیوه شی گرا ارائه می شوند، یادآور می شویم که دو روش در عمل کارکرد مشابه دارند و تفاوت در نحوه کدنویسی و مدیریت ساختار برنامه است، هرچند بحث در مورد تفاوت برنامه نویسی رویه ای و شی گرا باید در جای خود بررسی شود اما در یک تحلیل ساده معمولا از کدنویسی رویه ای برای نوشتن برنامه ها و پروژه های کوچک به عنوان روش به اصطلاح دم دستی استفاده می شود و برنامه نویسی شی گرا برای ایجاد ساختارهای پیچیده تر و نوشتن برنامه هایی با جزئیات بیشتر کاربرد دارد، خوشبختانه PHP در این زمینه سخاوتمند است و حق انتخاب را به کاربران می دهد، توصیه ما این است که ضمن فراگیری روش رویه ای به عنوان شیوه پایه و مقدماتی، پروژه های کاربردی و پر جزئیات خود را به روش شی گرا (OOP یا Object-oriented programming) بنویسیم.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
» اتصال PHP به MySQL با اکستنشن MySQLi
» استفاده از WHERE در پرس و جوی MySQL
» توابع تجمعی (Aggregate Functions) در MySQL
» محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
commentنظرات (۶۸ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: mavg
۱۸:۲۳ ۱۳۹۲/۱۱/۲۹
ممنون از لطف شما لازم به ذکر است که یک بار دیگر برنامه xamp را نصب نمودم و مشکل حل گردید . این موضوع را جهت تجربه بدست آمده عنوان نمودم . متشکرم از توجه شما
پاسخ: 
تشکر از به اشتراک گذاری.
نویسنده: 2ghab
۱۲:۲۹ ۱۳۹۲/۱۲/۱۳
با سلام و خسته نباشید
یه سوال داشتم
من یه مشکلی در نمایش فونت فارسی در زمان ارتباط mysql با php دارم، توی کدهای که از اکستنشن mysql استفاده می کردم با قرار دادن کد
mysql_query("set names utf8");
مشکلم حل میشد اما الان که از اکستنشن mysqli استفاده می کنم جواب نمیده ، میشه لطفا راهنماییم کنید
ممنون از سایت بسیار مفیدتون
پاسخ: 
از تکه کد زیر نیز استفاده کنید:
mysqli_set_charset($conn, "utf8");
نکته: متغیر conn در واقع لینک اتصال به دیتابیس است که باید متناسب با لینک اتصال موجود در کدهای خود آن را تغییر دهید.
نویسنده: محسن
۱۷:۱۳ ۱۳۹۳/۰۲/۰۹
من دو تا سوال داشتم برای جداولی که پیام کاربران در اون ذخیره میشه از innodb استفاده کنیم یا myisam و اینکه کاربرد تابع compress دقیقا چیه ایا میشه باهاش پیامهای کاربران رو فشرده ذخیره کرد تاثیری در کاهش حجم سرور داره؟ ممنون
پاسخ: 
انتخاب یک موتور بستگی به تعداد کاربران سایتتان دارد، در یک مقایسه کلی:
MYISAM
- از Table-level Locking استفاده می کند، یعنی به فرض اگر جدولی در حال نوشتن توسط کاربری باشد، در همان میلی ثانیه، کاربر دیگر نمی تواند در آن جدول چیزی بنویسد (ممکن است برای سایت های خیلی خیلی بزرگ مشکل ساز باشد).
- سرعت بالاتری دارد.
- در مواقع Crash کردن معمولا باید دستی جداول چک شوند.
- میزان فضای زیادتری برای ذخیره اطلاعات دارد (256 Terabytes).
- امکانات جستجوی پیشرفته تری دارد (Full Text indexing).
- از transaction پشتیبانی نمی کند، یعنی دستور به محض اجرا، انجام می شود و امکان بازگشت نیست.
INNODB
- از Row-level Locking استفاده می کند، یعنی تنها ردیفی قفل می شود که در حال استفاده است.
- تنظیم شده برای کار با داده های حجیم است.
- از transaction پشتیبانی می کند.
- در مقایسه با MYISAM حداکثر حجم کمتری دارد (64 Terabytes).
نتیجه:
اگر امکاناتی مانند جستجوی پیشرفته مبنی بر دیتابیس (با امکانات خود MySQL) برایتان اهمیت دارد، یا صرفا یک سایت با تعداد کاربر در حد معمول (حتی به فرض تا 100 یا 200 هزار نفر در روز) دارید، MYISAM از این نظر مشکلی نخواهد داشت و سریع تر است، در غیر این صورت استفاده از INNODB توصیه می شود.
در مورد تابع compress، قاعدتا بی تاثیر نیست، اما معمولا فشرده سازی بر روی سرعت کار نیز تاثیر منفی (هرچند ناچیز) خواهد داشت، در کل توصیه می کنیم امکانات سخت افزاری سرور را افزایش دهید تا استفاده از قابلیت هایی مانند compress در MySQL.
نویسنده: محسن
۱۷:۱۹ ۱۳۹۳/۰۲/۱۰
ممنون فقط گفتید جدول myisam هنگام نوشتن قفل میشود ایا هنگام خواندن هم قفل میشود؟
پاسخ: 
بله، البته این وقفه ها برای کاربر و در نتیجه نهایی چندان محسوس نیست (چون اگر هم دستوری در حال اجرا باشد، دستور بعدی بلافاصله پس از آن اجرا خواهد شد) و صرفا روال کار سیستمی را مشخص می کند.
نویسنده: javad
۱۹:۵۹ ۱۳۹۳/۰۲/۱۹
تشکر از مطالبتون من یه جدول دارم که میخوام سطح دسترسی کاربران در این جدول فقط select باشه و سایر دستورات در این جدول قابل اجرا نباشه میشه کمک کنید
پاسخ: 
سوالتان واضح نیست!
اگر منظور ایجاد کاربر دیتابیس با سطح دسترسی محدود است، این کار از طریق کنترل پنل هاست، بخش مدیریت دیتابیس ها و ایجاد کاربر برای دیتابیس ممکن است (با اختصاص privileges)، اما اگر منظور محدود کردن کاربران با استفاده از کدهای PHP است که قاعدتا باید این امکان در برنامه شما تعریف شود، به طور مثال برای هر کاربر یک سطح دسترسی خاص معیین کنید و در هنگام اجرای پرس و جوها ابتدا سطح دسترسی آنها را با دستور شرطی بررسی و در صورت برقرار بودن شرط، پرس و جو را اجرا کنید (البته در حالت حرفه ای معمولا سطح دسترسی و... به صورت یک رشته قابل تبدیل به آرایه در دیتابیس ذخیره می شود تا بعدا از تجزیه آن موارد مورد نظر و مقادیر آنها مشخص شود).
نویسنده: javad
۰۲:۰۷ ۱۳۹۳/۰۲/۲۰
ممنون من منظورم همون مورد اول هست میشه یه مقدار درباره سطح دسترسی محدود توضیح بدید چطور میتونم این کار رو بکنم
پاسخ: 
برای اعمال تغییرات در این حالت باید دسترسی مدیریتی به هاستتان داشته باشید، در این صورت در cPanel یا در برنامه phpMyAdmin می توانید در قسمت کاربران (Users) موارد مربوط به Privileges را به صورت اختصاصی ویرایش کنید.
نویسنده: محمد
۲۳:۴۵ ۱۳۹۳/۰۲/۲۸
سلام متن های فارسی که در فیلد های جداولم قرار داره به صورت نگشای نادری نمایش میده در حالی که utf8 رو هم فعال کردم آیا راهی هست که بشه فارسی کرد ؟
با تشکر
پاسخ: 
در درجه اول باید Server connection collation دیتابیس را
utf8_persian_ci
انتخاب کنید، سپس برای اینکه کاراکترها به صورت فارسی در دیتابیس ذخیره شوند مراحل زیر را انجام دهید:
- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکد
utf8_persian_ci
بسازید.
- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
SET NAMES 'utf8'
- اگر مشکل همچنان حل نشد، فایل های خود را با ویرایشگر ++Notepad باز کرده و سپس از قسمت Encoding گزینه Encoding UTF-8 without BOM را انتخاب و فایل خود را مجددا ذخیره نمائید.
نویسنده: محمد مومنی موگویی
۲۲:۰۵ ۱۳۹۳/۰۴/۰۸
سلام و خسته نباشید بنده می خواستم بدونم که سیمی کلن یا ; توی مای اس کیو ال کجا کاربرد داره توی تمام دستورات یا توی پرسش ها سیمی کلن به کار میره یا نه اصلا پرسش توی مای اس کیو ال چیه میشه پرسش رو مثال بزنید ممنونم
پاسخ: 
علامت ; مربوط به نحوه نگارش دستورات MySQL است که اغلب به معنی پایان یک دستور است، استفاده از این علامت اختیاری است، پرسش در واقع همان query یا دستوری است که فرآیندی را در MySQL منجر می شود، مانند SELECT کردن چند ردیف اطلاعات، یا UPDATE و...
مثال:
SELECT * FROM `tbl` WHERE 1;
نویسنده: محمد مومنی موگویی
۲۲:۳۱ ۱۳۹۳/۰۴/۱۰
سلام ممنونم
موفق باشین موگویی
نویسنده: hadi0098
۱۳:۴۰ ۱۳۹۳/۰۶/۳۱
سلام من چند روز قبل با pdo آشنا شدم
البته هنوز نمی تونم ازش استفاده کنم بنظر شما بهتره از mysql استفاده کنم یا pdo از نظر امنیت و سرعت
پاسخ: 
mysql اکستنشن اولیه PHP است و در حال حاضر برای نوشتن پروژه های جدید توصیه نمی شود، در کنار این اکستنشن mysqli و PDO ارائه شده که هر دو مورد مناسب هستند، اگر برنامه شما صرفا با دیتابیس MySQL کار می کند (که اغلب همین طور است)، استفاده از mysqli به جهت شباهت به mysql و پشتیبانی از شیوه برنامه نویسی رویه گرا (در کنار شی گرا) مناسب است، اما اگر در سطح حرفه ای هستید و با چندین دیتابیس ممکن است که کار کنید و نیز با برنامه نویسی شی گرا در PHP آشنا هستید، PDO می تواند انتخاب خوبی باشد.
نتیجه:
بهتر است ابتدا از صرف دستورات SQL شروع کنید و پرس و جوها را یاد بگیرید (دستورات دیتابیس بین روش های فوق فرقی ندارند)، سپس در هنگام نوشتن برنامه های کاربردی با PHP یکی از اکستنشن های mysqli یا PDO را انتخاب نمائید.
نویسنده: amirreza
۱۳:۱۹ ۱۳۹۳/۰۷/۰۸
سلام. سایتی جامعی دارین.
یه سوال آیا میشه دستورات php در فایل دیتابیس قرار بگیره؟
سوال بعدی اینکه فرمت دیتابیسی که phpmyadmin میده چیه؟
آخرین سوال، اینجور که تو اینترنت نوشته فایلی با پسوند sql میتونه اسکریپت باشه. آیا میتونه دیتابیس هم باشه؟
پاسخ: 
- دیتابیس برای نگهداری اطلاعات است نه اجرای آنها، لذا صرفا می توانید دستورات را به عنوان متن در دیتابیس داشته باشید، برای اجرا باید آنها را SELECT کرده و درون eval قرار دهید (البته این کار ریسک امنیتی دارد!).
- در برنامه PHPMyAdmin می توانید از دیتابیس خود در قسمت Export انواع خروجی های مختلف داشته باشید (فرمت استاندارد خود MySQL فرمت sql است).
- چنین فایلی معمولا حاوی دستورات دیتابیس و تنظیمات آن است، چون SQL بدین منظور تعریف شده (Structured Query Language).
نویسنده: سپهر عارفیان
۰۴:۰۰ ۱۳۹۳/۰۷/۱۳
سلام
وبسایت محشری دارین.
that's cool
نویسنده: آرزو
۱۲:۰۴ ۱۳۹۳/۰۹/۰۵
سلام خسته نباشيد.
من يه سوال داشتم ممنون ميشم اگه جوابمو بدين.
من يه پايگاه داده دارم با سه جدول جدول question و comment , relation _q_c
داخل جدول question ايدي سوال (Q_Id) ثبت ميشه و متن سوال
داخل جدول comment ايدي نظر (C_Id) ثبت ميشه به همراه متن نظر
و داخل جدول relation _q_c هم ايدي سوالو داريم و هم ايدي جوابو . خود اين جدول هم يه ايدي داره به نام QC_Id.
در واقع من دارم يه سايت مشابه stackoverflow.com رو ايجاد مي كنم.
مي خوام وقتي كاربر وارد يه سوال شد كه توسط يكي ديگر از اعضاي سايت پرسيده شده بتونه نظرات مربوط به همون سوال رو ببينه نه نظرات همه ي سوالا رو!
خوب اينو چطوري بايد بنويسم؟
ممنون ميشم اگه جواب بدين خيلي خيلي چون ماه بعد تحويل پرو‍ژه دارم
پاسخ: 
انجام اینگونه موارد از دو طریق ممکن است:
- هم می توانید به صورت معمولی و در چند پرس و جو، ابتدا ID نظرات را بر طبق ID مطلب استخراج کنید (این کار با اطلاعات جدول سوم ممکن است) و در حلقه while مجددا ID ها را در پرس و جوی دیگری استفاده کرده و محتوای آنها را از دیتابیس خروجی بگیرید.
- روش دیگر استفاده از پرس و جوی ترکیبی و به طور مثال بر مبنای JOIN است.
در صورت نیاز به کمک بیشتر نمونه فایل sql جداولتان را به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید.
نویسنده: آرزو
۱۸:۳۱ ۱۳۹۳/۰۹/۱۲
واقعا ممنونم ازتون.
نویسنده: مهران ابوالقاسمی
۰۰:۱۲ ۱۳۹۴/۰۳/۰۸
با عرض سلام و خسته نباشید
بنده دانشجوی ترم آخر مهندسی نرم افزارم (کارشناسی)
خیلی علاقه مندم مطالب طراحی وب و مسائل پیرامون اون رو فرا بگیرم
میشه لطف کنین در مورد اینکه چه کتابایی باید بخونم برای یاد گیری از سطح مقدماتی تا پیشرفته رو به من بگین
ممنون میشم به ایمیل بنده جواب رو ارسال کنین
با تشکر
پاسخ: 
مباحث مربوط به برنامه نویسی وب در هیچ کتابی به طور کامل قابل گفتن نیست، باید گام به گام سرفصل های اصلی یعنی مبانی وب، سپس HTML و CSS، در گام بعدی JavaScript و در صورت نیاز jQuery، سپس Ajax و در نهایت یک زبان برنامه نویسی سمت سرور (معمولا از بین PHP یا ASP) انتخاب کنید، برای تمام اینها در وب به اندازه کافی آموزش (فارسی و انگلیسی) وجود دارد، مهم این است چه میزان علاقه، تمرین و تلاش داشته باشید!
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





2 × 4
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form عبدالمالت ریالی
در:
سلام علیک میشه از چند فونت در یک صفحه html استفاده کرد.؟
۱۳۹۹/۰۸/۰۱

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

form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

form محمد
در:
سلام. یک کد نوشته ام بدین صورت: وقتی صفحه باز شده یک پنجره پیام خالی با یک ok باز شده هر چه ok را...
۱۳۹۹/۰۷/۲۸

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

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

form reza
در:
سلام خوبید انشاالله؟ خواستم بدونم این نوار ابزار رو چطور باید اونایی رو دوست دارم بزارم سمت راست وبلاگم. هر چی کد و ......
۱۳۹۹/۰۷/۲۴

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

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

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

form امیرحسین
در:
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته...
۱۳۹۹/۰۷/۲۱

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.