اتصال 5 جدول در یک select
با سلام به همه دوستان
http://cookbook.gigfa.com
این سایت با وردپرس زده شده من دارم با خود php این کارو میکنم
عکس زیر را نگاه کنید
http://uupload.ir/files/o2z5_3333_thumb.png
من 5 تا جدول دارم میخوام ب این شکل نشون بدم داخل یک select
میدونم اسمش inner jion هستش ولی هر کدی میزنم اررور میده
سرچ هم زیاد کردم ولی درک از کد هاشون نمیکنم خیلی خیلی عجیب غریب مینویسن
اسم جدول ها
video
news-game
it-news
game-review
و تو هر جدول
title
date
message
خونده میشه
هر جوری کد زدم ولی اررور میده
نقل قول: اتصال 5 جدول در یک select
SELECT news-game.title, news-game.date, news-game.message,
video.title, video.date, video.message FROM news-game, video
INNER JOIN video ON news-game.id = video.id;
نقل قول: اتصال 5 جدول در یک select
اول اینکه ساختار جدول ها رو توضیح بده که مشخص بشه چجوری به هم مرتبط هستن و اینکه آیا رابطه جدول ها 1 به 1 هست , یا 1 به چند
دوم اینکه کدت رو بزار بشه دید چی نوشتی (نمیدونم این پست دومی که گزاشتی همین کدته یا جواب صحیحه که خودت پیدا کردی یا ... )
سوم اینکه متن اررورت رو بزار مشخص بشه کجاش مشکل داری
در کل ساختار جوین 3 تیبل مثلا به این شکل میشه
لیست فیلد هایی که میخای
رابطه تیبل 1 با تیبل 2
رابطه تیبل 2 با تیبل 3
مثلا 3 تا تیبل داری t1 , t2 , t3
با این ساختار
t1 : id , col
t2 : id , col , t1_id
t3 : id , col , t2_id
کوئری اینجوری میشه
select t1.col , t2.col , t3.col
from t1
join t2 on t1.id = t2.t1_id
join t3 on t2.id = t3.t2_id
نقل قول: اتصال 5 جدول در یک select
عکس از کد و اررور
http://uupload.ir/files/h2am_code_thumb.png و http://uupload.ir/files/ikzm_error_thumb.png
اینم خود کد
SELECT news-game.title, news-game.date, news-game.message
video.title, video.date, video.message,
it-news.title, it-news.date, it-news.message,
game-translate.title, game-translate.date, game-translate.message,
game-review.title, game-review.date, game-review.message
FROM news-game
JOIN video ON news-game.id = video.id
JOIN it-news ON news-game.id = it-news.id
JOIN game-translate ON news-game.id = game-translate.id
JOIN game-review ON news-game.id = game-review.id
بازم نشد هر جوری کد میزنم
رایطه رو نمیدونم چطوری بفهمم با خود phpmyadmin ساختم
نقل قول: اتصال 5 جدول در یک select
روز بخیر
ابتدا به دلیل استفاده از خط تیره باید نام جداول را در بین علامت `` قرار دهید مانند:
select `news-game`.title from `news-game``
نقل قول: اتصال 5 جدول در یک select
نام جداول رو دستمون گفت مشکلش چیه در کل برای نام جداول و لینک ها از - استفاده نکن
در کنار این فکر میکنم جوین هات هم اشتباه باشن
JOIN video ON news-game.id = video.id
شما تو تیبل video باید یه کلید خارجی داشته باشی که این تیبل رو وصل کنه به تیبل news-game یه چیزی مثل new_game_id
شما داری تو تا تیبل رو از طریق فیلد id به هم متصل میکنی که اشتباهه و id آین دو تیبل هیچ ربطی به هم ندارن
نقل قول: اتصال 5 جدول در یک select
فکر کنم بازم غلطه اما از سایت زیر پیدا کردمش
http://pvlearn.com/product/%d8%af%d8...f%d8%b1-mysql/
فکر کنم خوب عمل کنه
SELECT `news-game`.`title`, `news-game`.`date`,`news-game`.`message`,
`video`.`title`, `video`.`date`, `video`.`message`,
`it-news`.`title`, `it-news`.`date`, `it-news`.`message`,
`game-translate`.`title`,`game-translate`.`date`,`game-translate`.`message`,
`game-review`.`title`,`game-review`.`date`,`game-review`.`message`
FROM `news-game`,`video`,`it-news`,`game-translate`,`game-review`
نقل قول: اتصال 5 جدول در یک select
میخای همه گیم ها با همه ویدئو ها رو بخونی از دیتابیس
یا یک گیم خاص با آیدی مشخص رو بخونی با ویدئو های مربوط به اون گیم
بجای اینکه کد کپی کنی از سایتی و متوجه نشی چی به چیه , راجب کلید خارجی و اینکه چجوری 2 تاتیبل رو به هم متصل میکنن بخون بعد یه join ساده بزن رو 2 تا تیبل تا دستت بیاد چجوری کار میکنه
بعد میتونی کدای پیچیده تر بزنی
نقل قول: اتصال 5 جدول در یک select
این کدرو از روی youtube یاد گرفتم اما خالی پاس میده و فقط یکی از جدول ها خالیه بقیه پر هستش
SELECT `video`.`title`,`video`.`date`,`video`.`message`,
`news-game`.`title`,`news-game`.`date`,`news-game`.`message`,
`it-news`.`title`,`it-news`.`date`,`it-news`.`message`,
`game-translate`.`title`,`game-translate`.`date`,`game-translate`.`message`,
`game-review`.`title`,`game-review`.`date`,`game-review`.`message`
FROM `video`
INNER JOIN `news-game` ON `video`.`id` = `news-game`.`id`
INNER JOIN `it-news` ON `video`.`id` = `it-news`.`id`
INNER JOIN `game-translate` ON `video`.`id` = `game-translate`.`id`
INNER JOIN `game-review` ON `video`.`id` = `game-review`.`id`
ORDER BY `video`.`id`
اینم از عکس
http://uupload.ir/files/pv09_table_thumb.png
نقل قول: اتصال 5 جدول در یک select
باید کلید خارجی join کنی
`video`.`id` = `news-game`.`id`
video.id کلید خارجی نیست
احساس میکنم دارم با خودم حرف میزنم : ))
نقل قول: اتصال 5 جدول در یک select
نقل قول:
نوشته شده توسط
plague
باید کلید خارجی join کنی
`video`.`id` = `news-game`.`id`
video.id کلید خارجی نیست
احساس میکنم دارم با خودم حرف میزنم : ))
دوست عزیز
ممنون بابت کمک اما مشکل اینه خالی خروجی میده با اینکه جدول پره
نقل قول: اتصال 5 جدول در یک select
سعی میکنم به ساده ترین شکل ممکن توضیح بدم امیدوارم با دقت بخونی و هی حرف خودت رو نزنی
وقتی 2 تا تیبل به هم ربط دارن باید یک فیلد مشترک داشته باشن که مقدارشون توی 2 تا تیبل یکی باشه
مثلا 2 تا تیبل داری پدر و پسر
فیلد هاشون میشه
پدر : شناسه (id), نام (name) , شغل (job)
پسر : شناسه(id) , شناسه پدر (father_id) , نام (name) , شغل (job)
اگه دقت کنی تو تیبل پسر یک فیلد هست به اسم شناسه پدر که از روی این میشه فهمید که هر پسر برای کدوم پدر هست
مثلا داده های تو تیبل ها اینجوری میشه
پدر : 6 , احمد , نجار
پسر : 1 , 6 , رضا , خیاط
به عبارت دیگه
پدر . شناسه = پسر . شناسه پدر -> هردو 6 هست تو مثالی که زدم
به این میگن کلید خارجی ... شما وقتی میخای جوین کنی باید کلید خارجی داشته باشی توی 2 تا تیبلی که میخای جوین کنی تا دیتبایس بتونه این دو رو بهم ربط بده
اینجوری میشه جوین
SELECT father.name , son.name FROM father
JOIN son ON father.id = son.father_id
شما اگه کلید خارجی نداشته باشی تو تیبل هات دیتبایس نمیتونه این دو رو به هم ربط بده و در نتیجه خروجی خالی برمیگردونه
نقل قول: اتصال 5 جدول در یک select
ببخشید دوباره بالا اورم
من کدش رو درست کردم و توی mysql workbench درست و شیک کار میکنه و عالی و عالی
اما توی php خیر ایندفعه کد php رو مشکل دارم
اینم عکس
http://uupload.ir/files/bnvj_end_thumb.png
اینم خود کدش
$query = "select
`news-game`.`title`,
`video`.`title`,
`it-news`.`title`,
`game-translate`.`title`,
`game-review`.`title`
from `news-game`
join `video` on `news-game`.`id` = `video`.`id`
join `it-news` on `news-game`.`id` = `it-news`.`id`
join `game-translate` on `news-game`.`id` = `game-translate`.`id`
join `game-review` on `news-game`.`id` = `game-review`.`id`
ORDER by `news-game`.`id`";
if($stmt = $conn->query($query))
{
while($row = $stmt->fetch_assoc())
{
foreach($stmt as $row)
{
?>
<tr>
<td><a href="" class="text-danger"><?php echo $row["title"]; ?></a></td>
</tr>
<?php } } } ?>
</table>
</nav>
نقل قول: اتصال 5 جدول در یک select
همینو صاف کپی کن
$query = "select
ng.title,
video.title,
itnews.title,
gt.title,
gr.title
from `news-game` AS ng,
video AS video,
`it-news` AS itnews,
`game-translate` AS gt,
`game-review` AS gr
WHERE ng.id=video.id AND
ng.id=itnews.id AND
ng.id=gt.id AND
ng.id=gr.id
ORDER BY ng.id";