آگهی
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
» ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
» توابع تجمعی (Aggregate Functions) در MySQL
» استفاده از WHERE در پرس و جوی MySQL
» به روز رسانی ردیف ها در MySQL با UPDATE
commentنظرات (۳۶ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: مهران
زمان: ۰۲:۰۱:۲۱ - تاریخ: ۱۳۹۲/۱۲/۰۵
سلام
شرمنده من در مورد داده های سلسله مراتبی سوال داشتم. البته شاید با همین join هم اجرا بشه. به هر حال بنده جدولی دارم که نظرات رو دریافت میکنه نظرات بینندگان رو. این جدول من id داره، newsid داره که نظر مربوط به هر خبر رو ثبت میکنه. parent_id هم داره. و سایر اطلاعات کار parent_id من اینه که نظر معمولی رو که بیننده ارسال میکنه 0 ارسال میکنه تو قسمت post.حالا من برای هر نظر پاسخ گذاشتم که بیننده به هر نظر یک پاسخ ارسال کنه. حالا من یبارم به parent_id آیدی نظر اصلی رو ارسال میکنه و تو parent_id ثبت میکنه. یعنی parent_id نظر اصلی 0 و parent_id پاسخ ها آیدی نظر اصلی. تا اینجا مشکلی ندارم. حالا میخوام بدونم کوئری رو چطوری بنویسم که سلسله مراتبی رعایت بشه و نظرات اصلی به همراه زیر مجموعه هاش به نمایش دربیاد.
من از طریق حلقه زیر نظرات رو نمایش میدم
$comments = getcomments ($newsid);
<?php

if ($comments ) { ?>
<?php while ($commentsrow = mysql_fetch_assoc($comments)){?>
<div class="comentpost">

<div class="comentpostname"><?php echo' ' .$commentsrow ['name'] ?> </div>
<div class="comentposttext"> <?php echo' ' .$commentsrow ['body'] ?></div>

<?php }?>
<?php }?>

و توی فایل جداگانه ای کوئری رو نوشتم که بصورت زیر هست

function getComments ($newsid)
{

$result = mysql_query("SELECT * FROM comments WHERE newsid = '$newsid' AND active=1 ORDER BY id DESC
");

$rows = mysql_num_rows($result);

if ($rows>0) return $result;return false;

}
البته اینها فقط نظر اصلی رو دریافت میکنه. ممنون میشم یه راهنمایی کوچیکی کنید که کوئری رو چطوری بنویسم؟ و اینکه میخوام بدونم باید دو تا کوئری بنویسم که کوئری دوم پاسخ ها رو نمایش بده و تو حلقه ی جداگانه نمایش بدم یا نه؟ با join باید ارتباط بدم. اگر امکانش هست یه کوئری نمونه رو بنویسید تا من بر اساس اون انجام بدم
پاسخ: 
سلام
دوست گرامی ساختار دیتابیس شما باید دقیق بررسی شود، صرف توضیحات خیلی به درک ساختار کمکی نمی کند (در این حالت زمانبر است!)، به هر صورت به نظر با دستور join می توانید موارد اشتراکی بین دو جدول را مطابق نیازتان استخراج کنید، به نمونه های موجود در آموزش و همچنین پاسخ نظراتی که پیش تر ارسال شده توجه کنید، احتمالا پاسختان را خواهید گرفت (باید کمی تمرکز کنید!).
نویسنده: Hosein
زمان: ۱۵:۰۴:۵۱ - تاریخ: ۱۳۹۳/۰۱/۲۷
سلام
دو تا جدول کارم جدول خبر و گروه
جدول خبر: کد خبر (کلید اصلی)، زمان، عنوان، کد گروه (کلید خارجی)
جدول گروه: کد گروه (کلید اصلی)، عنوان ، زمان
میخوام کوئری بنویسم که توی هر روز چند عدد خبر با چه عنوان هایی و هر خبر مربوط به کدوم گروه خبری است
چطوری باید نوشت؟
پاسخ: 
سلام
برای بدست آوردن تعداد، هم می توانید با COUNT پرس و جوی مجزا بنویسید، هم از توابعی مانند mysql_num_rows (در صورتی که از اکستنشن mysql استفاده می کنید) استفاده کنید و هم در حلقه یک مقدار عددی را به میزان دور آن افزایش دهید تا تعداد خبرها مشخص شود، اما برای مورد دوم لطفا آموزش مربوط به نحوه استفاده از JOIN (به طور خاص قسمت LEFT JOIN) را مطالعه کنید، با مثال توضیح داده شده.
نویسنده: yaser
زمان: ۱۶:۳۲:۱۴ - تاریخ: ۱۳۹۳/۰۲/۳۰
ببخشید چطور میشه برای یک فیلد عددی محدودیت ایجاد کرد یعنی میخوام اعداد فقط 0 تا 10 درونش قابل نوشتن باشه
پاسخ: 
بهتر است این کار در کدنویسی PHP و به طور مثال با دستورات شرطی انجام شود، مثال:
<?php
$number = 12;
if($number >= 0 && $number <= 10){
//insert
}
?>
در MySQL باید از TRIGGER استفاده کنید که ساده نیست.
نویسنده: peyman
زمان: ۱۶:۵۷:۴۵ - تاریخ: ۱۳۹۳/۰۳/۲۵
با سلام وخسته نباشید
من دو تا جدول دارم با نام های test , test2 و فیلد های
id ( در هر دو جدول)
title ( در هر دو جدول)
newssport (برای جدول test)
news (برای جدول test2)
حالا میخواستم فیلد title هر دو جدول رو در یک جا نمایش بدم و به صورت نزولی باشند
اگه راهنماییم کنید ممنون میشم .
پاسخ: 
سلام
با استفاده از UNION یا UNION ALL این کار ممکن است، مثال:
SELECT id, title FROM test UNION ALL SELECT id, title FROM test2 ORDER BY id ASC
نویسنده: abbas
زمان: ۰۴:۲۶:۵۹ - تاریخ: ۱۳۹۳/۰۴/۰۸
سلام ببخشید چرا جملات فارسی که از دیتابیس میگیرم بصورت علامت سوال ؟؟؟ دیده میشه و جملات فارسی هم که به سرور میفرستم کلمات ناخوانا دیده میشه فیلدی هم که در دیتابیس برای این جملات در نظر گرفتم utf8_persian_ci هست
پاسخ: 
سلام
در مجموع برای اینکه مشکلی از لحاظ ذخیره و نمایش حروف فارسی در دیتابیس نداشته باشید باید تمام مراحل زیر را به صورت صحیح انجام دهید:
در درجه اول باید Server connection collation دیتابیس را
utf8_persian_ci
انتخاب کنید، سپس مراحل زیر را انجام دهید:
- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکد
utf8_persian_ci
بسازید.
- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
mysql_query ("SET NAMES 'utf8' ");
- اگر مشکل همچنان حل نشد، فایل های خود را با ویرایشگر ++Notepad باز کرده و سپس از قسمت Encoding گزینه Encoding UTF-8 without BOM را انتخاب و فایل خود را مجددا ذخیره نمائید.
نویسنده: الیاس
زمان: ۱۳:۲۹:۴۲ - تاریخ: ۱۳۹۳/۰۴/۱۹
سلام
یه سوال:
فرض کنید چند تا جدول دارید
جدول مطالب: کد مطلب - عنوان مطلب - کد نویسنده - کد زبان - و...
رکورد-> 100 تست 2 1
جدول نویسندگان: کد نویسنده - نام نویسنده
رکورد-> 1 امید
رکورد-> 2 علی
جدول زبان: کد زبان - نام زبان
رکورد-> 1 فارسی
رکورد-> 2 انگلیسی
جدول موضوعات: کد موضوع - عنوان موضوع
رکورد-> 1 ورزشی
رکورد-> 2 اجتماعی
جدول رابط مطلب و موضوع: کد موضوع - کد مطلب
رکورد-> 1 100
رکورد-> 2 100
حال sql می خوام که خروجی مثل زیر باشه
کد مطلب: 100
عنوان مطلب: تست
نام نویسنده: علی
زبان: فارسی
موضوع: ورزشی - اجتماعی
پاسخ: 
سلام
اگر درست متوجه ساختار دیتابیس شده باشیم با پرس و جویی ترکیبی مشابه دستورات زیر مشکلتان حل می شود (البته بدون تست نمی توان پاسخ دقیق داد، برای دریافت پاسخ دقیق نمونه فایل sql دیتابیس را به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا بررسی کنیم):
SELECT tbl_1.col_1, tbl_1.col_2, tbl_1.col_3, tbl_2.col_1, tbl_3.col_1 FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.col_1 = tbl_2.col_1 INNER JOIN tbl_3 ON tbl_1.col_2 = tbl_3.col_1
نویسنده: الیاس
زمان: ۱۸:۱۷:۱۴ - تاریخ: ۱۳۹۳/۰۴/۲۰
نه منظور من این نبود فایل را برایتان ایمیل کردم
ممنون
پاسخ: 
با بررسی فایل این پرس و جو راه حل مشکل شما است:
SELECT matlab.title, subject.name
FROM `matlab` , `subject` , `rel`
WHERE matlab.id = rel.ida
AND rel.idb = subject.id
LIMIT 0 , 30
نویسنده: reza
زمان: ۲۱:۵۹:۳۵ - تاریخ: ۱۳۹۳/۱۰/۱۲
سلام ببخشید بازم مزاحمتون شدم
عزیز من مشکلم بر طرف نشد
<form action="get.php">
از تاریخ<input name="from date" value="تاریخ را وارد کنید">
<br>
تا تاریخ<input name="to date" value="تاریخ را وارد کنید">
<button type="submit">ارسال</button>
</form>
این رو توی یک صفحه قرار دادم ، توی یک صفحه دیگه با اسم get.php
این موارد رو گذاشتم
<table border="1" bordercolor="#000000" style="width:95%;">
<?php
$date_1 = mysql_real_escape_string($_POST['from date'], $con);
$date_2 = mysql_real_escape_string($_POST['to date'], $con);
include_once("config.php");
$con = mysql_connect($db_host,$db_user,$db_pass) or die("خطا در اتصال به پايگاه داده");
$selected=mysql_select_db($db_name, $con) or die("خطا در انتخاب پايگاه داده");
$dbresult=mysql_query("SELECT * FROM $db_table WHERE date > $date_1 AND date < $date_2 ORDER BY id DESC");
while($amch=mysql_fetch_assoc($dbresult))
{
echo
" <td> "
.$amch["id"].
" </td><td> "
.$amch["ip"].
" </a></td><td> "
.$amch["country"].
" </td><td> "
.$amch["date"].
" </td><td> "
.$amch["time"].
" </td><td> "
.$amch["device"].
" </td><td> "
.$amch["browser"].
"</td></tr>"
;}
?>
</table>
اما وقتی تاریخ رو وارد میکنم و دکمه ارسال رو میزنم ارور میده
از این دو تا خطی که توی صفحه گذاشتم ارور میگیره
$date_1 = mysql_real_escape_string($_POST['from date'], $con);
$date_2 = mysql_real_escape_string($_POST['to date'], $con);
این دو تا رو چیکار کنم که ارور نده و تاریخ رو اعمال کنه ؟
البته بعد از وارد کردن آدرس صفحه get.php به شکل زیر در میاد
get.php?from+date=2015-01-02&to+date=2014-12-28
که تا اینجاش فکر میکنم درست کار شده ، اما در ادامه ارور میده و خروجی دیتابیس رو نمایش نمیده و از دو تا بخش $date_1 و $date_2 ارور میگیره
لطفاً بنده رو راهنمایی بفرمایید
پاسخ: 
سلام
تابع mysql_real_escape_string را زمانی استفاده کنید که تابع mysql_connect (اتصال دیتابیس) اجرا شده باشد، به عبارتی تکه کد اول را بعد از تکه کد مربوط به اتصال قرار دهید تا ابتدا لینک متغیر con ایجاد و سپس از آن استفاده شود! نوع دیتای مربوط به تاریخ در دیتابیس نیز باید به صورت DATETIME باشد نه چیز دیگری.
نویسنده: محمد
زمان: ۱۷:۳۹:۲۱ - تاریخ: ۱۳۹۳/۱۲/۱۲
سلام. من با چه کدی میتونم مثلا کالومن هشتم یه دیتابیس رو سلکت کنم؟
پاسخ: 
سلام
این شیوه توصیه نمی شود چون در شرایط مختلف (به فرض تغییرات بعدی)، کدهای شما دچار مشکل خواهند شد! اما جهت اطلاع چند راه حل وجود دارد، راه حل ابتدایی این است که با
SELECT * FROM
تمام ستون های یک جدول را انتخاب و با
$row = mysql_fetch_row()
در اصطلاح ستون ها را fetch کرده و در حلقه while مقادیر کلید مورد نظر را بر اساس شماره استخراج کنید، به فرض:
$row[7]
، روش دیگر که حرفه ای است، استفاده از INFORMATION_SCHEMA و ORDINAL_POSITION است، مثال:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'your database schema' AND TABLE_NAME = 'your table name' AND ORDINAL_POSITION = 8;
نکته: database schema همان نام دیتابیس است و table name نام جدول، به این ترتیب از دیتابیس خلاصه اطلاعات MySQL یا همان INFORMATION_SCHEMA، جدول COLUMNS بر اساس ستون TABLE_SCHEMA و TABLE_NAME و همچنین ORDINAL_POSITION می توان مقدار COLUMN_NAME را به دست آورد.
نویسنده: محمد
زمان: ۱۸:۴۲:۱۳ - تاریخ: ۱۳۹۳/۱۲/۱۵
بازم سلام..... اون دو تا راه اول رو میدونستم ولی منظور من برای هک کردن همون راه سوم بود که متوجه شدم :) تشکرررررررر..
به نظر شما چرا information_schema هست؟ خیلی خطر ناکه
پاسخ: 
سلام
information_schema مرکز خلاصه اطلاعات کل جداول و ستون های MySQL است و این خود گویا است که دستکاری پرس و جوهای تنظیم شده برای کار با آن (به فرض حمله از نوع Injection) می تواند به کل ساختار آسیب برساند.
نویسنده: مجتبی
زمان: ۱۷:۲۴:۴۳ - تاریخ: ۱۳۹۳/۱۲/۲۴
سلام وقت بخیر
من می خوام دو تا جدول انتخاب واحد و دانشجو رو که دارم پیوند بدم این کار رو هم انجام دادم ، الان نیاز دارم که یک شرط استفاده کنم که سطرهایی رو نشون بده که کد استادیش برابر فلان باشد
می تونید کمک کنید که شرط رو باید چجوری و کجا بنویسم اینم دستوراتم هست
FROM selectv WHERE pid='$prof_id'
INNER JOIN course
ON course.crsid=selectv.crsid
INNER JOIN stud
ON stud.stid=selectv.stid
INNER JOIN proof
ON selectv.pid=proof.pid
پاسخ: 
سلام
بررسی ساختار دقیق دیتابیس و هدف شما برای ارائه پاسخ دقیق ضروری است، با این حال به نظر می توانید از AND برای WHERE اول استفاده کنید.
نویسنده: پریسا
زمان: ۱۳:۳۲:۴۳ - تاریخ: ۱۳۹۴/۰۲/۲۲
با سلام
من دو جدول دارم که فقط ستون ID آنها برابر است و میخوام چند ستون مشخص از جدول اول و چند ستون مشخص از جدول دوم رو انتخاب کنم و سطر مشخصی از این ستونهای انتخاب شده رو چاپ کنم. (مثلا از این ستونها فقط سطر ID=2 رو میخوام انتخاب کنم).
و یک سوال دیگه اینکه وقتی دو جدول رو جوین کردیم چطوری به این جدول جوین شده اسم بدیم که بتونیم دوباره ازش استفاده کنیم
با تشکر.
پاسخ: 
سلام
لطفا بخش ابتدایی آموزش و هچنین قسمت مربوط به INNER JOIN را مطالعه کنید، دقیقا مطابق با نیاز شما و همراه با مثال است!
نویسنده: پریسا
زمان: ۱۰:۲۳:۲۳ - تاریخ: ۱۳۹۴/۰۲/۲۳
سلام بازم ممنون از حوصله ای که به خرج میدید. ولی در بخش ابتدایی فقط این قسمت بود:
SELECT tbl_1.skill, tbl_2.count FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.id = tbl_2.count
حالا من میخوام به این جدول اسم بدم یا اینکه سطر مشخصی از tbl_1.id = tbl_2.count رو انتخاب کنم ؛ مثلا میشه بنویسم:
 ON tbl_1.id = tbl_2.count = 2
پاسخ: 
سلام
- منظور از بخش ابتدایی آموزش، قسمت ساخت جدول و همچنین INNER JOIN است.
- عبارت tbl_1 و... در واقع نام انتخابی جداول هستند که می تواند با توجه به نام جداول شما هر چیز دیگری باشد.
- برای اجرای یک پرس و جوی صحیح باید شیوه نگارش دستورات MySQL را رعایت کنید، لذا حالت مد نظر شما به صورت نمونه زیر با استفاده از WHERE قابل اعمال است:
SELECT tbl_1.name, tbl_2.count FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.skill = tbl_2.language WHERE tbl_1.id = 1
نویسنده: پریسا
زمان: ۱۲:۰۱:۴۶ - تاریخ: ۱۳۹۴/۰۲/۲۷
سلام
با تشکر از جوابهای مفیدتون. این بار یه سوال کلی تری دارم
اگر بخوام به این جدول جدید اسم بدم که بعدن دوباره ازش استفاده کنم ؛ مثلا مرتب کنم یا هر کار دیگه چه باید کنم؟
خودم عبارت زیر رو استفاده کردم اما جواب نداد
SELECT tbl_1.name, tbl_2.count FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.skill = tbl_2.language as MY_NEW_TABLE
پاسخ: 
سلام
برای استفاده از نام مستعار (alias) برای جداول یا ستون ها در MySQL، عبارت "AS" یا باید بعد از ستون مورد نظر درج گردد و یا بعد از قسمت FROM، آموزش و مثال:
http://clivern.com/learning-mysql-aliases
نویسنده: علی
زمان: ۱۷:۵۰:۲۷ - تاریخ: ۱۳۹۵/۰۳/۰۴
ممنون از مطالب خوبتون
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ کوتاه و مختصر داده خواهد شد!
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.





1 × 3
 refresh
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form سحر
در:
سلام من وقتی میخوام توی قسمت صفحات جداگانه وبلاگم گزینه ادامه مطلب رو بیارم باید چیکار کنم چون فقط قسمت نوشته جدید همچین قابلیتی...
۱۵:۰۸:۱۹ ۱۳۹۹/۰۳/۰۸

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

form علیرضا
در:
با سلام مجدد در پاسخ یکی از کامنت هایم فرمودین که جهت فراخوانی (اجرای) یک فایل در سرور راس ساعت مشخص و صرف...
۱۱:۲۸:۲۴ ۱۳۹۹/۰۳/۰۵

form علیرضا
در:
سلام اگر بخواهیم صفحات سایت رأس ساعت مشخصی مثلا ساعت 12 ظهر رفرش بشه چه کدی رو باید استفاده کنیم. ممنون
۰۴:۴۳:۴۷ ۱۳۹۹/۰۳/۰۵

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

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

form علی
در:
چطور میشه همزمان با کلیک بر روی «تعویض کد» یعنی کد زیر: پوشه ساخته بشه. با سپاس
۰۹:۵۰:۲۷ ۱۳۹۹/۰۳/۰۳

form علی
در:
با سلام... من یه متغیر تعریف کردم مثلا رو بهش متصل کنیم ممنون از پاسختون.
۰۶:۱۶:۲۷ ۱۳۹۹/۰۳/۰۳

form یاسمن
در:
سلام یه برنامه ای که رشته رو به عنوان password دریافت کنه و کاراکتر فاصله نباشد طول رشته هم از 8 تا 50 باشه عدد...
۱۸:۵۲:۴۴ ۱۳۹۹/۰۳/۰۲

form مرتضی ق
در:
سلام خسته نباشید. یک سایت اصلی و مادر دارم مثلا www.m.com حالا سه سایت دیگر زیر مجموعه مثلا m1 و m2 و m3 من...
۱۸:۲۵:۱۱ ۱۳۹۹/۰۳/۰۲

form میترا
در:
با سلام ببخشید مطلبتون خیلی خوب بود یه سوال من با فتوشاپ انلاین کار می کنم نمی دونم چرا نمی تونم باهاش...
۱۸:۱۵:۱۰ ۱۳۹۹/۰۳/۰۲

form fatemeh
در:
پاراگراف زیر را داریم. چه تنظیماتی در CSS و HTML نیاز است تا در صفحه وببدرستی نمایش داده شود؟ میشه برا جواب این سوال...
۱۶:۳۲:۲۳ ۱۳۹۹/۰۳/۰۱

form علی
در:
با سلام و عرض ادب من یه فانکشن تعریف کردم و کدهای فایل ajax-loading-message.php رو درونش گذاشتم
۰۸:۴۲:۲۱ ۱۳۹۹/۰۳/۰۱

form Maryam
در:
سلام .. من میخاستم کدی بنویسم که خروجی آن دکمه on .. of باشه که با زدن دکمه رنگ پس زمینه تغییر کند ممنون میشم...
۰۲:۲۱:۳۴ ۱۳۹۹/۰۲/۳۱

form amir
در:
سلام ممنون از سایت خوبتون چطور میشه با جاوااسکریپت ایجکس و پی اچ پی بتونم تمامی جدول های دیتابیس رو هر کدوم با یه...
۲۰:۴۵:۵۲ ۱۳۹۹/۰۲/۳۰
form علی
در:
با سلام و عرض ادب بسیار سایت پر محتوایی دارید تبریک... می خواستم بپرسم اگر بخواهیم مثلا کاربر روی یک لینکی در سایت...
۰۷:۲۲:۰۱ ۱۳۹۹/۰۲/۳۰
form Edward ASharp
در:
سلام میشه همين فایلای کاملشو به من بدید؟
۰۰:۰۲:۲۱ ۱۳۹۹/۰۲/۳۰
form میکاییل
در:
سلام من پروزه ای دارم با mvc نوشته شده و در روت سایت فایل htacsess دارم که کد های زیر توشه ...
۰۲:۳۰:۰۲ ۱۳۹۹/۰۲/۲۹
form mahdi
در:
سلام استاد عزیز ، این درسته که با node.js دیگه نیازی به یادگیری php نخواهیم داشت؟
۲۲:۳۹:۳۶ ۱۳۹۹/۰۲/۲۸
form امیر مهدی
در:
سلام ممنونم از اینکه کمکم کردید ولی من منو رو با زیر منوها می خواستم کد شما زیر منوها رو از بین برد. منظور من...
۲۲:۳۰:۱۵ ۱۳۹۹/۰۲/۲۸
form امیر مهدی
در:
سلام. من در طراحی منو سایت با مشکل برخوردم. من منو خودم رو ساختم و متوجه شدم که منو من مقداری فضا از سمت چپ...
۱۹:۲۴:۰۱ ۱۳۹۹/۰۲/۲۸
form امین
در:
خیلی خیلی ممنون از اینکه جواب دادید اما الان که امتحان کردم مجموع همه ی سفارشات رو میزنه یعنی اگر 3 نفر سفارش دادن...
۱۳:۴۶:۵۵ ۱۳۹۹/۰۲/۲۸
form امین
در:
درود به شما خسته نباشید یک سوال داشتم خیلی گشتم اما پیدا نکردم من دیتابیسی برای مثال invert دارم میخوام یک صفحه...
۰۱:۰۰:۴۵ ۱۳۹۹/۰۲/۲۸
form امیر
در:
عالی بود. سپاس گذارم
۱۰:۱۹:۴۴ ۱۳۹۹/۰۲/۲۷
form فرامرز اسماعیلی
در:
سلام خسته نباشید. من داخل ویرایشگرهای notepad++ یا Braket دستور html رو می نویسم یعنی فایل متنی به صورت index.html رو می خواهم اجرا کنم...
۲۲:۴۱:۴۳ ۱۳۹۹/۰۲/۲۶
form پری
در:
سلام بعضی از سایت ها وقتی اهنگ بعدی رو پلی میگنیم اهنگ قبلی که در حال پخش است به طور خودگار قطع میشود میشه این...
۱۴:۲۲:۲۵ ۱۳۹۹/۰۲/۲۶
form ilia Delbar
در:
خیلییییییییییی خوبه! فقط دلم می خواد یه برنامه درست کنم رنگ ها رو نشون بده (رنگ تگ ها)
۱۳:۱۵:۱۹ ۱۳۹۹/۰۲/۲۶
form زهیر صفری
در:
با سلام چطور میتونم تاریخ تولد فرد ایرانی رو بگیره مثلا از input و سن فرد رو در input بعدی نمایش بده میتونید...
۱۲:۳۸:۵۷ ۱۳۹۹/۰۲/۲۶
form حبیب
در:
با سلام بنده از طریق مودم خانه به اینترنت وصل شدم هم با کامپیوتر و هم با موبایل. اما ای پی در هر...
۰۳:۱۲:۵۴ ۱۳۹۹/۰۲/۲۶
form امین
در:
سلام خسته نباشید امیدوارم جوابمو بدید من داخل یک صفحه این کد جاوا رو دارم میخوام خروجی که میده رو داخل...
۱۳:۴۴:۳۳ ۱۳۹۹/۰۲/۲۵
form امیر هادی نجاتی
در:
ممنون از شما. این قسمت (استفاده از جاوا اسکریپت برای غیر فعال کردن کلیک راست) واقعا به دردم خورد .
۲۱:۰۳:۵۰ ۱۳۹۹/۰۲/۲۴
form لیلا
در:
سلام ، ببخشید من میخوام یک مدرک رو در سایت آپلود کنم ولی ارور زیر رو میده . میشه راهنماییم کنید. ممنون
۱۴:۵۲:۴۷ ۱۳۹۹/۰۲/۲۴
form زهرا جعفری
در:
با سلام بنده میخواهم در جاوااسکریپت یک textbox داشته باشم که در آن یک دکمه چشمک زن بذارم وسط متن و وقتی روی...
۱۰:۰۱:۵۱ ۱۳۹۹/۰۲/۲۴
form جواد
در:
سلام. مقادیر و اطلاعاتی از یک سایت دیگه با همین متد file get contents میگیرم که روی لوکال هاست سرعتش خوبه، روی سرور هم بد...
۲۲:۰۳:۲۲ ۱۳۹۹/۰۲/۲۳
form علی رضایی
در:
در خط آخر خطای نحوه ارسال آرگومان می دهد. خطای syntax است یا دستور مورد دارد؟
۱۳:۲۹:۴۹ ۱۳۹۹/۰۲/۲۳
form علی
در:
سلام میخوام مطالب مرتبط با موضوعات سایتم رو در پایین اونها نمایش بدم چجوری میتونم این کار رو بکنم
۰۱:۲۸:۰۰ ۱۳۹۹/۰۲/۲۳
form امیرحسین
در:
با سلام. من تو css میخوام از اتریبیوت border-radius استفاده کنم ولی وقتی مقدارشو مثلا توی div زیاد میذارم متن داخل div بیرون میاد میخواستم...
۱۹:۵۲:۳۰ ۱۳۹۹/۰۲/۲۲
form امیرعلی
در:
با سلام بنده میخواستم بدانم که میشود تگ div را با این روش ها پنهان کرد من میخواهم افزونه ی وردپرسی را...
۱۲:۳۹:۲۶ ۱۳۹۹/۰۲/۲۲
form یوسف رضایی
در:
با سلام و خسته نباشید خواستم بپرسم خروجی یک فرم (با چند گزینه) بر روی برووزر که اماده برای ارسال برای سرور هست را توی...
۱۱:۱۴:۰۳ ۱۳۹۹/۰۲/۲۲
form سعیده
در:
سلام من یه اهنگ که تو وبلاگم میزارم صفحه پخش اهنگ میاد و بلندگوش ولی اون مثلث پلی کنندش نمیاد یعنی عملا واسم...
۱۵:۴۱:۰۵ ۱۳۹۹/۰۲/۲۱
form مجید اسکندری فر
در:
سلام حدود 700 تصویر رو در وبلاگم بارگذاری کردم و حدود 6000 بازدید داشته علت عدم نمایش تصاویر بارگذاری شده در وبلاگم چیست؟ خیلی زحمت...
۱۰:۳۲:۴۵ ۱۳۹۹/۰۲/۲۱
form علیرضا
در:
سلام، ممنون از مطلب کاملتون یه نکته رو هم من اضافه کنم برای کاملتر شدن مقاله، هر آدرس آی پی از یک شناسه هاست...
۰۹:۳۷:۵۰ ۱۳۹۹/۰۲/۲۱
form mahdi
در:
سلام استاد عزیز ، خیلی ممنون از راهنمایی ، انجامشون میدم، فکر میکنم همه این کارارو بلد باشم فقط WYSIWYG رو اصلا نشنیده بودم که...
۰۷:۱۸:۳۷ ۱۳۹۹/۰۲/۲۱
form معصومه
در:
سلام، امروز دیدم که عکس های وبلاگم حذف شده چرا؟ چطور میتونم برشون گردونم؟ عکس ها رو از سایت پیکو فایل آپلود میکردم، هرچقدرم سعی...
۱۴:۵۳:۵۱ ۱۳۹۹/۰۲/۲۰
form mahdi
در:
سلام استاد عزیز و گرامی ، یه درخواستی داشتم ازتون میخوام اگه براتون ممکنه من رو در جاوا اسکریپت بسنجی که بدونم چیا بلدم...
۱۴:۱۸:۵۸ ۱۳۹۹/۰۲/۱۹
form امیر
در:
با سلام، خدمت دوستان عزیز دو جدول به نام‌های Messages و Comments موجود هستند. در جدول Comments فیلدی به نام IDElement وجود دارد که...
۰۵:۲۹:۳۸ ۱۳۹۹/۰۲/۱۹
form ehsan hoseini sianaki
در:
سلام خیلی عالی و کاربردی بود. خسته نباشید.
۲۳:۰۰:۵۱ ۱۳۹۹/۰۲/۱۷
form امید
در:
با سلام و عرض ادب فیلتری میخوام که تعداد جوابهای فیلترهای سایت tse بورس که با جاوا نوشته شده رو بگه مثلا قرار...
۰۰:۱۰:۵۱ ۱۳۹۹/۰۲/۱۷
form احسان
در:
سلام ببخشید من هر کار میکنم تو گوشی اندروید با Html یه عکس رو در سایت خودم بزارم هیچی نمیشه فقط یه علامت عکس میاد...
۲۲:۲۸:۳۷ ۱۳۹۹/۰۲/۱۶
form hasti
در:
سلام . وقت بخیر . میشه مثالی بزنید که right over join برابر با inner join (داخلی) بشه . /با order و customer/ ...
۲۰:۰۵:۱۷ ۱۳۹۹/۰۲/۱۶
form میثم
در:
سلام مجدد من دیگه اینقدر با این کدها ور رفتم دیوونه شدم. این کل تابع منه. شما می تونید برای حل مشکلی که...
۱۷:۳۰:۳۱ ۱۳۹۹/۰۲/۱۶
form میثم
در:
سلام در تکمیل سوالی که خدمت شما عرض شد: ببینید ما دو تا فیلد فایل داریم توی اولی عکس اپ میشه و توی...
۱۶:۲۶:۲۶ ۱۳۹۹/۰۲/۱۶
form ماردین
در:
سلام من میخواستم ببینم چکار کنم که اولین query رو بدون حذف بقیه query ها حذف کنم
۱۵:۵۲:۵۴ ۱۳۹۹/۰۲/۱۶
form میثم
در:
سلام یه سوال خدمت شما داشتم. من با جاوا اسکریپت میخوام بخش فایل توی فرمم رو چک کنم. توی فرم 2 تا فیلد...
۱۱:۴۷:۵۲ ۱۳۹۹/۰۲/۱۶
form amir mtf
در:
سلام ببخشید من میخواستم در تگ این‌پوت برخی از کلمات و علامت ها رو حذف کنم. یک درخواست دیگر هم دارم اگه میشه کد...
۱۲:۳۷:۰۵ ۱۳۹۹/۰۲/۱۵
form کیوان
در:
سلام ممنون از سایت خوبتون، من یه فرم دارم که اطلاعاتش رو از دیتابیس میگیره، چطور میتونم با نوشتن حلقه بعد از چاپ سه...
۱۸:۲۲:۲۴ ۱۳۹۹/۰۲/۱۳
form mohammad
در:
آموزشتون خیلی فهما و دقیق بود ممنون
۲۱:۵۵:۳۸ ۱۳۹۹/۰۲/۱۲
form محمودی
در:
سلام چطوری میتونم برای سایت ثبت نام کدبورسی و ثبت نام ارز دیجیتال بک لینک بگیرم
۱۵:۲۶:۰۷ ۱۳۹۹/۰۲/۱۲
در انتظار بررسی: ۰