article

استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL

mysql-join

مطالبی که تا این لحظه از بخش آموزش مقدماتی MySQL فرا گرفته ایم معمولا برای حالت های متداول و کار با جداول به صورت مجزا کافی خواهند بود، اما در برنامه نویسی های پیشرفته تر و در طراحی ساختار برنامه های پیچیده نیاز به نوشتن پرس و جوهای ترکیبی و برقراری تعامل بیشتر بین جداول موجود در دیتابیس است، این نیاز سبب شده که قابلیت دیگری تحت عنوان JOIN (و مشتقات آن) به دستورات MySQL اضافه شود که به کمک آن می توان پرس و جوهای ترکیبی نوشت و بین جداول مختلف ارتباط برقرار کرد، در ادامه در مورد آن بیشتر خواهیم گفت.

ساخت جداول فرضی با دستور CREATE


برای درک بهتر نحوه عملکرد دستور JOIN پیش از هر چیز لازم است که چند جدول و ستون فرضی با مقادیری از پیش تعریف شده بسازیم که در زیر پرس و جوی آن را ملاحظه می کنید.
نکته: پیش از اجرای کدهای زیر باید از طریق برنامه phpMyAdmin دیتابیسی با نام فرضی test بسازید، دقت کنید که Collation دیتابیس بر روی utf8_persian_ci تنظیم شده باشد.
<?php
$con = mysql_connect("localhost","root","");
if (!$con){
    die('اتصال برقرار نشد: ' . mysql_error());
}
mysql_select_db("test", $con);
mysql_query("SET NAMES 'utf8'");

mysql_query("CREATE TABLE tbl_1(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(255),
skill VARCHAR(255)) ENGINE=MyISAM "
)
or die(mysql_error());

mysql_query("ALTER TABLE tbl_1
DEFAULT CHARACTER SET utf8
COLLATE utf8_persian_ci;"
)
or die(mysql_error());

mysql_query("CREATE TABLE tbl_2(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
language VARCHAR(255),
count VARCHAR(255)) ENGINE=MyISAM "
)
or die(mysql_error());

mysql_query("ALTER TABLE tbl_2
DEFAULT CHARACTER SET utf8
COLLATE utf8_persian_ci;"
)
or die(mysql_error());

echo "جدول با موفقیت ساخته شد!<br>";

//اطلاعات اولیه به صورت آرایه
$name_skill = array('علی' => 'HTML', 'ساسان' => 'PHP', 'پدرام' => 'Ajax');
$language_count = array('HTML' => 9, 'PHP' => 3, 'Ajax' => 6);

//ذخیره در دیتابیس
foreach($name_skill as $key => $value){
    mysql_query("INSERT INTO tbl_1 (name, skill) VALUES('$key', '$value')")
    or die(mysql_error());
}
foreach($language_count as $key => $value){
    mysql_query("INSERT INTO tbl_2 (language, count) VALUES('$key', '$value')")
    or die(mysql_error());
}

echo "اطلاعات با موفقیت افزوده شد!<br>";

mysql_close($con);
?>
پرس و جوی بالا دو جدول با مقادیری از پیش تعریف شده ایجاد می کند، در جدول نخست لیست کاربران به همراه مهارت برنامه نویسی آنها به صورت زیر قرار دارد.
id     name     skill
1     علی       HTML
2     ساسان     PHP
3     پدرام     Ajax
در جدول دوم عنوان هر زبان برنامه نویسی و به فرض تعداد برنامه نویس موجود و مسلط به آن زبان درج شده.
id     language      count
1       HTML           9
2       PHP            3
3       Ajax           6
همان طور که ملاحظه می کنید بین دو جدول در ستون های skill و language ارتباطی متقابل وجود دارد (هر دو ستون عناوین مربوط به زبان های برنامه نویسی را در خود دارند)، بنابراین به فرض اگر بخواهیم مسابقه ای بین افراد هم مهارت برگزار کنیم و نیاز به محاسبه تعداد رقبای اسامی موجود در جدول اول باشد، به ناچار باید در پرس و جوی خود هم از اصلاعات جدول اول (اسامی و مهارت آنها) و هم از اطلاعات جدول دوم (مهارت و تعداد شرکت کننده) استفاده کنیم، هرچند این کار با نوشتن دو پرس و جو نیز امکانپذیر است، اما حرفه ای تر آن است که به کمک JOIN و مشتقات آن (INNER JOIN، LEFT JOIN، RIGHT JOIN، OUTER JOIN) یک پرس و جوی ترکیبی نوشته و به هدف خود برسیم، بدین ترتیب می توان نوشت:
$resutl = mysql_query("SELECT tbl_1.name, tbl_2.count FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.skill = tbl_2.language")
or die(mysql_error());
while($row = mysql_fetch_array($resutl)){
    echo $row['name']. ' : ' .$row['count']. '<br>';    
}
که خروجی دستور بالا به صورت نمونه زیر خواهد بود.
علی : 9
ساسان : 3
پدرام : 6
نکته: برای تعریف شرط در هنگام استفاده از دستور JOIN (و مشتقات آن)، از عبارت ON استفاده می شود.
برای آشنایی بیشتر با JOIN و مشتقات آن، در ادامه به صورت موردی این دستور را بررسی می کنیم.

حالت INNER JOIN


حالت اول از مشتقات دستور JOIN به صورت INNER JOIN می باشد، در این حالت می توان به مواردی مشترک از هر دو جدول دسترسی داشت، نتیجه پرس و جو شامل برخی موارد از جدول اول به همراه برخی موارد دیگر از جدول دوم (بر اساس شرط تعیین شده) خواهد بود، مثال:
SELECT tbl_1.skill, tbl_2.count FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.skill = tbl_2.language
خروجی این حالت به صورت زیر خواهد بود.
skill     count
HTML       9
PHP        3
Ajax       6
ملاحظه می کنید که با اجرای پرس و جوی بالا ردیف های زیر از جدول اول:
HTML
PHP
Ajax
و ردیف های زیر از جدول دوم به عنوان خروجی برگردانده می شوند:
9
3
6

حالت LEFT JOIN


نوع دیگر از مشتقات دستور JOIN به صورت LEFT JOIN است که در این حالت تمام ردیف های جدول اول صرف نظر از شرط تعیین شده به همراه ردیف های جدول دوم (بر اساس شرط تعیین شده) به عنوان خروجی برگردانده می شوند، مثال:
SELECT tbl_1.skill, tbl_2.count FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.id = tbl_2.count
خروجی پرس و جوی بالا به صورت زیر خواهد بود.
skill     count
HTML      NULL
PHP       NULL
Ajax       3
نکته: ردیف هایی که در جدول دوم بر اساس شرط تعریف شده انتخاب نشوند، با مقدار NULL برگردانده می شوند.

حالت RIGHT JOIN


مشابه حالت LEFT JOIN، حالت RIGHT JOIN است که در این صورت ردیف ها از جدول دوم صرف نظر از شرط تعیین شده انتخاب و ردیف های جدول اول بر اساس شرط انتخاب می شوند، مثال:
SELECT tbl_1.skill, tbl_2.count FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.id = tbl_2.count
خروجی پرس و جوی بالا به صورت زیر خواهد بود.
skill     count
NULL        9
Ajax        3
NULL        6

حالت OUTER JOIN


حالت آخر از مشتقات JOIN به صورت OUTER JOIN یا FULL JOIN است که در این صورت می توان دو پرس و جوی مبتنی بر JOIN را با عبارت کلیدی UNION (اجتماع) به هم مرتبط نمود، مثال:
SELECT tbl_1.skill, tbl_2.count FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.id = tbl_2.count UNION SELECT tbl_1.skill, tbl_2.count FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.id = tbl_2.count
نتیجه پرس و جوی بالا به صورت زیر خواهد بود.
skill     count
HTML      NULL
PHP       NULL
Ajax       3 
NULL       9
NULL       6
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» حذف مقادیر از MySQL با دستور DELETE
» محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
» توابع تجمعی (Aggregate Functions) در MySQL
» به روز رسانی ردیف ها در MySQL با UPDATE
commentنظرات (۳۸ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: علی
۱۵:۰۴ ۱۳۹۲/۰۹/۲۱
آموزش خیلی مفیدی بود
من یه سوال هم داشتم یا بهتر بگم راهنمایی
----------
من برای نمایش جدیدترین کاربرام از این دستورات استفاده می کنم که البته به جای نام کاربری تصویر اون کاربر رو نشون دادم
{php}
$host = "localhost"; // نام هاست
$username = "root"; // Mysql نام کاربری
$password = ""; // Mysql کلمه عبور
$db_name = "photo"; // نام پایگاه داده
$tb_name = "users"; // نام جدول
@$checkbox = $_POST['checkbox'];

// اتصال به سرور و پایگاه داده
$con = mysql_connect("$host", "$username", "$password")
or die("اتصال امکان پذیر نیست");

// انتخاب پایگاه داده
mysql_select_db("$db_name")
or die("انتخاب پایگاه داده میسر نیست");

// انتحاب و محاسبه تمام ردیف های موجود
$sql = "SELECT * FROM $tb_name ORDER BY `userid` DESC LIMIT 3";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
{/php}

{php}
while($rows=mysql_fetch_array($result)){
{/php}

<img src="{php} echo $rows['avatar']; {/php}" class="avatar" border="none" height="80" width="90" >

{php}
}
{/php}
خوب حالا شاید یه کاربری که تازه عضو شده هنوز وقت نکرده یه تصویر واسه شناسش انتخاب کنه یا آپلود کنه
میخوام واسه همچین کاربرایی یه تصویر پیش فرض قرار بدم
تو یکی از پروژه ها یه همچین دستوری دیدم که تست کردم ولی جواب نداد
WHERE `image` != 'default.png'
یعنی نتیجه این میشد
$sql = "SELECT * FROM $tb_name WHERE `image` != 'default.png' ORDER BY `userid` DESC LIMIT 3";
یه مثال برام بزنید لطفا
منتظر راهنماییتون هستم
سپاس و خسته نباشید
پاسخ: 
ابتدا باید ببینید مقادیر پیش فرض برای ستون avatar چیست (یا مقدار خالی است یا یک عبارت به فرض default.png)، سپس قسمت زیر را ویرایش کنید:
{php}
while($rows=mysql_fetch_array($result)){
$avatar = $rows['avatar'];
if($avatar == ''){
$avatar = 'default.png';
}
{/php}

<img src="{php} echo $avatar {/php}" class="avatar" border="none" height="80" width="90" >

{php}
}
{/php}
نویسنده: علی
۰۰:۰۵ ۱۳۹۲/۰۹/۲۴
خیلی هم عالی
ممنون از راهنمایی که کردین
سپاس و خسته نباشید
نویسنده: علی
۲۰:۴۱ ۱۳۹۲/۱۰/۰۴
اگه بخوایم لیست کاربرها رو به صورت اتفاقی انتخاب کنه دستورات باید به چه شکل باشن؟
و اینکه اگه بخوایم مثلا ده کاربر اخر رو از جدول نشون بده چی؟
پاسخ: 
برای نمایش اتفاقی باید از تابع RAND در پرس و جوی MySQL خود استفاده کنید، برای انتخاب آخرین ردیف ها نیز از ASC یا DESC و همچنین LIMIT استفاده کنید (برای کسب اطلاعات بیشتر لطفا به بخش آموزش مقدماتی مراجعه یا در وب جستجو کنید).
نویسنده: محسن
۱۷:۰۰ ۱۳۹۲/۱۰/۱۰
سلام ببخشید میشه این مشکلم رو حل کنید
من دو تا جدول دارم. توی جدول a یه فیلد (سر فیلد) دارم بنام car که مقدارش بسته به انتخاب کاربر میتونه benz یا bmw یا fiat باشه و توی جدول b سه سر فیلد دارم بنام benz, bmw, fiat که مقدارشون عدد 5 ,10 ,15 هست حالا میخوام طوری از دستور select استفاده کنم که اگه فیلد car جدول اول برابر با هر کدوم از سه ماشین بود مقدار همون ماشین توی جدول دوم برگرده شبیه یه چنین چیزی
select  (select car from a where id=2) from b where id=2
پاسخ: 
سلام
به نظر برای مورد شما چون تنها وجه اشتراک دو جدول مقادیر و نام ستون ها است، تنها می توان در دو پرس و جوی مجزا (یک پرس و جو برای گرفتن نام خودرو) و سپس استفاده از آن در پرس و جوی بعدی به عنوان نام ستون (به صورت داینامیک) به نتیجه مورد نظر رسید، حالت های JOIN در صورتی کاربرد دارند که بین مقادیر دو جدول اشتراک وجود داشته باشد.
نویسنده: رضا
۱۵:۴۶ ۱۳۹۲/۱۰/۱۱
با سلام و خسته نباشید
من 10 عدد جدول دارم که هیچ یک از فیلدهای آن 10 جدول با هم مشابه و عین هم نیستند به جز فقط فیلد ID که در تمامی جدول ها وجود دارد من چگونه می توانم ارتباط بین هر جدول را برقرار کرده و با زدن یک دستور select مثلا 1 رکورد از هر جدول را به نمایش بگذارم.
با تشکر
در صورت امکان سریع راهنمایی کنید من درگیر این مسئله هستم
پاسخ: 
سلام
JOIN در موقعیت جداول شما کاربردی ندارد، باید از پرس و جو با جداول چندگانه استفاده کنید، مثال:
SELECT * FROM table1, table2 WHERE table1.id = table2.id;
نویسنده: مهدی صفری
۲۰:۱۸ ۱۳۹۲/۱۰/۱۹
سلام در مورد create table view در php کمی آموزش دهید
با تشکر
پاسخ: 
سلام
تا آنجا که اطلاع داریم، مبحثی به این عنوان در PHP و MySQL وجود ندارد! شاید منظورتان گرفتن خروجی از دیتابیس به صورت HTML و در قالب جدول است که در این صورت باید به مبحث SELECT FROM مراجعه کنید، در کل اگر با نحوه گرفتن خروجی آشنا باشید، اینکه به چه صورتی از آنها استفاده کنید به خودتان بستگی دارد.
نویسنده: مسعود
۰۲:۵۶ ۱۳۹۲/۱۰/۲۲
با سلام و احترام
من جدول اخباری دارم که این رو تو یک ستونی به نمایش گذاشتم حالا جدول دیگه ای به نام نظرات هم دارم. حالا میخوام تو این ستون اخباری که تعداد نظراتشون بالا بود بیاد اولین سطر: من از کوئری زیر استفاده کردم اما فقط یک خبر اونم بدون اینکه تعداد نظرش بالا باشه نشون میده مشکلم به نظرتون کجاست؟
("select * from `news` inner join `comments` on `news`.`id`=`comments`.`id` group by `news`.`id` order by count(`comments`.`id`)   desc limit 19");
پاسخ: 
سلام
مشخص نیست ارتباط جدول news با comments در چیست، به عبارتی توضیح نداده اید که چگونه نظرات به یک خبر تعلق می گیرد (در چه ستونی، id مربوط به یک خبر در جدول comments ذخیره می شود؟)
نویسنده: مسعود
۲۳:۱۸ ۱۳۹۲/۱۰/۲۲
من جدول news رو دارم که توش id title body و سایر موارد رو داره یه جدول دیگه به نام comments دارم که توش id newsid name email body رو دارم که از از طریق newsid یک نظر رو به خبر ارتباط میدم حالا هم من از همین طریق میخوام اون ستونی که اخبار رو با بیشترین نظر ارائه بده!!!
پاسخ: 
با توجه به اطلاعات ارائه شده، به نظر با پرس و جوی زیر به هدفتان می رسید:
SELECT news.title, news.body FROM news LEFT JOIN comments ON news.id = comments.newsid GROUP BY comments.newsid ORDER BY COUNT(comments.newsid) DESC
نویسنده: مجید
۱۸:۰۰ ۱۳۹۲/۱۰/۲۳
سلام
اگه روی یه جدول که مثلا 20 هزار سطر داره که هر سطر مختص به یک کاربر هستش بیایم یه تریگر از نوع update تعریف کنیم که تحت شرایط خاص فیلد خاصی رو update میکنه (برای هر کاربر) ایا این مساله باعث کندی جدول میشه یا اصلا چنین کاری درسته یا راحل جایگزین وجود داره؟
پاسخ: 
سلام
سوالتان مبهم و کلی است، کند شدن دیتابیس به عوامل زیادی مربوط می شود، ممکن است دستور تریگر به خودی خود باعث کندی نشود اما تعداد دفعات، نوع و محتوای دستور، حجم اطلاعات، هم زمانی یا مجزا بودن دستورات، قدرت سخت افزاری سرور و... در عملکرد دیتابیس موثر خواهند بود.
نویسنده: رضا
۰۹:۲۰ ۱۳۹۲/۱۱/۱۵
سلام میخواستم بدونم سیستم پیام ها در پایگاه داده به چه شکل تعریف میشه مثلا باید برای هر پیام کاربر یک فیلد از نوع fulltext تعریف کنیم؟ و اینکه چه تعداد فیلد باید برای هر کاربر تعریف کنیم در حالی که نمی دونیم چقدر پیام میده؟ برای مثال همین پیامهایی که کاربران سایت شما میدن در چه نوع فیلدی ثبت میشه و ایا جدولش باید از نوع myisam باشه؟. با تشکر
پاسخ: 
سلام
به نظر اطلاعات شما در رابطه با پایگاه داده MySQL کافی نیست، لذا توصیه می کنیم ابتدا موارد مقدماتی را از ابتدا مطالعه کنید!، به هر صورت تعداد و نوع ستون ها بستگی به هدف شما دارد، به فرض برای نام پیام دهنده می توانید یک ستون از نوع VARCHAR با مقادیر 255 کاراکتر داشته باشید، برای پیام ها از نوع TEXT و...
موتور جدول نیز می تواند MYISAM یا INNODB باشد (ترجیح با MYISAM مگر اینکه با کاربردهای INNODB آشنا باشید).
نویسنده: رضا
۱۹:۲۳ ۱۳۹۲/۱۱/۱۵
ممنون در خصوص تعداد فیلدهای text چی مثلا ما سایتی داریم که هر کاربر میتونه بی نهایت پیام بده مثل سایت شما چه تعداد باید برای هر کاربر فیلد text در نظر بگیریم؟
پاسخ: 
ستون و سطر دو مفهوم متفاوت هستند، اطلاعات کاربران به صورت سطرها در هر ستون قرار می گیرد، درست شبیه برنامه هایی مانند Excel، یعنی یک ستون name می تواند حاوی هزاران سطر با مقادیر متفاوت باشد (به آموزش های مقدماتی رجوع کنید).
نویسنده: رضا
۲۱:۵۹ ۱۳۹۲/۱۱/۱۵
ببخشید من با مفاهیم پایگاه داده اشنایی نسبی دارم
آیا منظور شما اینه که یک فیلد text برای هر کاربر وجود داره که تمام پیام های اون رو شامل میشه؟ یا اینکه برای هر پیام باید یک فیلد text جداگانه داشته باشیم؟ اگه مورد دوم منظور شماست در نتیجه ما باید چه تعداد فیلد text برای یک کاربر در نظر بگیریم در حالی که نمی دونیم چه تعداد پیام ارسالی داره
پاسخ: 
نوع برداشت شما از دیتابیس صحیح نیست! در جداول شما ستون ها را مشخص می کنید و سطر های اطلاعات معمولا به صورت خودکار (تا جایی که ظریفیت جدول یا ستون id اجازه دهد) ذخیره می شوند، مثال:
id     name       comment
1 Ali متن پیام
2 Kourosh متن پیام
3 Mehrdad متن پیام
نویسنده: رضا
۱۶:۱۰ ۱۳۹۲/۱۱/۱۷
ممنون مطلب رو گرفتم فقط برای سایت هایی که کاربران قابلیت ثبت نام دارن و میتونن به هم پیام بدن باید جدول رو به چه شکل طراحی کرد
پاسخ: 
طراحی جدول بستگی به نیاز شما دارد، در اینگونه سایت ها هم می توان با یک جدول کارهای مورد نظر را انجام داد، در هر صورت منطقی نیست که ساخت جدول در دیتابیس مبتنی بر تعداد کاربران باشد! به فرض می توان یک ستون برای دریافت کننده پیام در نظر گرفت (که می تواند تا حد ممکن ردیف اطلاعاتی داشته باشد)، هر پیامی که ارسال می شود یک دریافت کننده مشخص (در ستون مربوطه) دارد و لذا اطلاعات درهم نمی شود!
به نظر تمام مشکلات شما از عدم آشنایی کافی با نحوه طراحی و استفاده از جداول و ستون ها در دیتابیس است.
نویسنده: مسعود
۲۲:۱۵ ۱۳۹۲/۱۱/۲۳
با سلام و احترام
من برای قسمت نظرات ارسال پاسخ به هر نظر رو گذاشتم و قسمت ارسال نظر جدول comments و برای پاسخ ها جدول replaycomments اولا میخواستم بدونم این روش درسته یا نه؟ بعد حالا من قسمت ارسال نظر رو مشکل ندارم بیننده میاد نظر میده و نظرش تو comments همچنین با گرفتن newsid آیدی خبر ذخیره میشه الان مشکلم تو ارسال پاسخ هست که ایا باید join کنم که نظر اصلی ثبت بشه و نظراتی که زیر مجموعه اون هستند زیر اون ثبت بشه یا نه فرق داره؟
من تو جدول replaycomments آیدی خبر newsid و همچنین آیدی نظر اصلی رو commentsid رو سایر اطلاعات رو دریافت می کنم! من بصورت عادی توی حلقه اول نظر اصلی بعد حلقه بعدی پاسخ ها رو دریافت می کنم اما پاسخ ها فقط به نظری که اول ارسال شده زیر اون قرار می گیره؟
پاسخ: 
سلام
دوست گرامی بدون بررسی دقیق کدها و ساختار دیتابیس شما نمی توان درک درستی از هدف و مشکلتان داشت، اما در کل طراحی ساختار دیتابیس در اکثر موارد یک کار سلیقه ای است و روش خاصی برای آن وجود ندارد (یعنی هم می توان در یک جدول تمام موارد را خلاصه کرد هم اینکه برای هر بخش اصلی، یک جدول جداگانه در نظر گرفت)، البته افراد با تجربه تر معمولا تمام موارد را مد نظر می گیرند، اگر واقعا ایجاد دو جدول ضرورت داشت، هیچ ایرادی بر این کار متصور نیست (منتها باید نحوه استفاده از پرس و جوهای ترکیبی و کار با آرایه ها، حلقه ها و... را به خوبی بلد باشید).
نویسنده: مسعود
۲۳:۵۲ ۱۳۹۲/۱۱/۲۴
بله کاملا متوجه شدم. ارایه و حلقه ها رو هم میدونم. ولی خب مساله اصلی من این بود که میخواستم ببینم با این روش انجام میشه یا خیر؟
من با کوئری زیر کامنت ها رو دریافت میکنم
 function getComments ($newsid)
{
$result = mysql_query("SELECT * FROM comments WHERE newsid = '$newsid' AND active=1 ORDER BY id DESC
");
یعنی جدول اصلی من comments هست که کوئری رو بصورت بالا دریافت کردم و نظرات رو نشون میدم. حالا جدول دیگه ای دارم به نام replaycomments که توش ستون id و commentsid رو دارم commentsid ای دی اصلی جدول comments رو دریافت میکنه و نشون میده که این پاسخ برای اون نظر هست. حالا میخوام اون جدول رو با این اتصال بدم که کامنت اصلی رو نشون بده و جواب های نظر رو زیر اون نشون بده. ممنون میشم یه راهنمایی بفرمایید. یه پیشنهادی هم دارم یه انجمن هم راه بندازید بهتر میشه. یا یه چیزی مثل question answer
پاسخ: 
برای این کار می توانید از LEFT JOIN استفاده کنید، مثال:
SELECT comments.name, comments.text, replaycomments.replay
FROM comments
LEFT JOIN replaycomments ON comments.id = replaycomments.commentsid
LIMIT 0 , 30
نکته: این فقط یک پرس و جوی فرضی و جهت راهنمایی است، ممکن است با توجه به ساختار جدول نیاز به تغییراتی باشد، خروجی پرس و جو از طریق توابعی مانند mysql_fetch_array قابل تجزیه است، همچنین برای درک بهتر ابتدا به صورت تستی در برنامه phpMyAdmin پرس و جو را امتحان کنید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





9 × 2
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
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 جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
form نبی
در:
‏asc و desc رو جابجا نوشتی
۱۳۹۹/۰۷/۰۴
form ساناز محمدی
در:
سلام مرسی از کدی که گذاشتید ♥
۱۳۹۹/۰۷/۰۳
form mahtab
در:
سلام خسته نباشین ببخشید میخواستم بپرسم که چجوری میتونیم یه کلیپ رو از کامپیوتر از انیستا دانلود کنیم ؟؟ اها اینم بگم...
۱۳۹۹/۰۷/۰۲
form سعید
در:
سلام دستتون درد نکنه از پروژه شما استفاده کردم فقط یه مشکل اگه در یک صفحه دو تا لیست کشویی داشته باشیم چطوری...
۱۳۹۹/۰۷/۰۱
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.