PDA

View Full Version : سوال: اتصال 5 جدول در یک select



capitan_nemesis
پنج شنبه 18 مهر 1398, 13:51 عصر
با سلام به همه دوستان
http://cookbook.gigfa.com

این سایت با وردپرس زده شده من دارم با خود php این کارو میکنم

عکس زیر را نگاه کنید
http://uupload.ir/files/o2z5_3333_thumb.png (http://uupload.ir/view/o2z5_3333.png)

من 5 تا جدول دارم میخوام ب این شکل نشون بدم داخل یک select
میدونم اسمش inner jion هستش ولی هر کدی میزنم اررور میده

سرچ هم زیاد کردم ولی درک از کد هاشون نمیکنم خیلی خیلی عجیب غریب مینویسن

اسم جدول ها
video (http://localhost/phpmyadmin/sql.php?db=cs&table=video&pos=0)
news-game (http://localhost/phpmyadmin/sql.php?db=cs&table=news-game&pos=0)
it-news
(http://localhost/phpmyadmin/sql.php?db=cs&table=it-news&pos=0)



game-translate (http://localhost/phpmyadmin/sql.php?db=cs&table=game-translate&pos=0)
http://localhost/phpmyadmin/themes/dot.gif (http://localhost/phpmyadmin/db_structure.php?db=cs&ajax_request=1&favorite_table=game-translate&add_favorite=1)


game-review (http://localhost/phpmyadmin/sql.php?db=cs&table=game-review&pos=0)

و تو هر جدول
title
date
message
خونده میشه
هر جوری کد زدم ولی اررور میده

capitan_nemesis
پنج شنبه 18 مهر 1398, 14:15 عصر
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;

plague
پنج شنبه 18 مهر 1398, 16:53 عصر
اول اینکه ساختار جدول ها رو توضیح بده که مشخص بشه چجوری به هم مرتبط هستن و اینکه آیا رابطه جدول ها 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

capitan_nemesis
شنبه 20 مهر 1398, 18:14 عصر
عکس از کد و اررور
http://uupload.ir/files/h2am_code_thumb.png (http://uupload.ir/view/h2am_code.png) و http://uupload.ir/files/ikzm_error_thumb.png (http://uupload.ir/view/ikzm_error.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 ساختم

ali_sed
یک شنبه 21 مهر 1398, 07:42 صبح
روز بخیر

ابتدا به دلیل استفاده از خط تیره باید نام جداول را در بین علامت ‍`` قرار دهید مانند:



select `news-game`.title from `news-game``

plague
یک شنبه 21 مهر 1398, 17:16 عصر
نام جداول رو دستمون گفت مشکلش چیه در کل برای نام جداول و لینک ها از - استفاده نکن
در کنار این فکر میکنم جوین هات هم اشتباه باشن
JOIN video ON news-game.id = video.id

شما تو تیبل video باید یه کلید خارجی داشته باشی که این تیبل رو وصل کنه به تیبل news-game یه چیزی مثل new_game_id
شما داری تو تا تیبل رو از طریق فیلد id به هم متصل میکنی که اشتباهه و id آین دو تیبل هیچ ربطی به هم ندارن

capitan_nemesis
یک شنبه 21 مهر 1398, 20:04 عصر
فکر کنم بازم غلطه اما از سایت زیر پیدا کردمش
http://pvlearn.com/product/%d8%af%d8%b3%d8%aa%d9%88%d8%b1-join-%d8%af%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`

plague
یک شنبه 21 مهر 1398, 20:27 عصر
میخای همه گیم ها با همه ویدئو ها رو بخونی از دیتابیس
یا یک گیم خاص با آیدی مشخص رو بخونی با ویدئو های مربوط به اون گیم
بجای اینکه کد کپی کنی از سایتی و متوجه نشی چی به چیه , راجب کلید خارجی و اینکه چجوری 2 تاتیبل رو به هم متصل میکنن بخون بعد یه join ساده بزن رو 2 تا تیبل تا دستت بیاد چجوری کار میکنه
بعد میتونی کدای پیچیده تر بزنی

capitan_nemesis
دوشنبه 22 مهر 1398, 12:06 عصر
این کدرو از روی 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 (http://uupload.ir/view/pv09_table.png)

plague
دوشنبه 22 مهر 1398, 14:37 عصر
باید کلید خارجی join کنی



`video`.`id` = `news-game`.`id`


video.id کلید خارجی نیست


احساس میکنم دارم با خودم حرف میزنم : ))

capitan_nemesis
دوشنبه 22 مهر 1398, 15:19 عصر
باید کلید خارجی join کنی



`video`.`id` = `news-game`.`id`


video.id کلید خارجی نیست


احساس میکنم دارم با خودم حرف میزنم : ))

دوست عزیز
ممنون بابت کمک اما مشکل اینه خالی خروجی میده با اینکه جدول پره

plague
دوشنبه 22 مهر 1398, 16:50 عصر
سعی میکنم به ساده ترین شکل ممکن توضیح بدم امیدوارم با دقت بخونی و هی حرف خودت رو نزنی

وقتی 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



شما اگه کلید خارجی نداشته باشی تو تیبل هات دیتبایس نمیتونه این دو رو به هم ربط بده و در نتیجه خروجی خالی برمیگردونه

capitan_nemesis
یک شنبه 28 مهر 1398, 12:12 عصر
ببخشید دوباره بالا اورم
من کدش رو درست کردم و توی mysql workbench درست و شیک کار میکنه و عالی و عالی
اما توی php خیر ایندفعه کد php رو مشکل دارم
اینم عکس
http://uupload.ir/files/bnvj_end_thumb.png (http://uupload.ir/view/bnvj_end.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>

mortezagt
چهارشنبه 29 آبان 1398, 16:29 عصر
همینو صاف کپی کن


$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";