PDA

View Full Version : سوال: join با استفاده از دو column !



yeksib
جمعه 30 فروردین 1392, 09:17 صبح
من تو خروجی گرفتن این تیبل مشکل دارم ، ببینید خروجی باید به صورتی باشه که میاد از جدول airport دو فیلد Begin_ID_CITY و Destination_ID_CITY رو میخونه و بعد میاد از جدول citys اسم شهرشون رو میخونه هیمن !

یعنی دست آخر باید داشته باشیم مثلا ID=4 پرواز از شهر مشهد به بندر عباس .




citys:

ID_CITY | NAME |
--------------- ---------------
1 | تهران |
2 | شیراز |
3 | اصفهان |
4 | مشهد |
5 | بندرعباس |
6 | اردبیل |

airport:
ID | Begin_ID_CITY | Destination_ID_CITY
---------- --------------------- -------------------
1 | 1 | 6 |
2 | 2 | 1 |
3 | 5 | 1 |
4 | 4 | 5 |

فقط میخواهم طریقه ی صحیح fetch کردنش رو هم بگن !
از بین دوستان کسی هست بتونه کمک کنه !؟

MMSHFE
جمعه 30 فروردین 1392, 10:13 صبح
SELECT `id`,`begin_city`,`name` AS `destination_city`
FROM (
SELECT `id`,`name` AS `begin_city`,`destination_id_city`
FROM `airport`
JOIN `cities`
ON `begin_id_city`=`cities`.`id_city`
) AS `temp`
JOIN `cities`
ON `destination_id_city`=`cities`.`id_city`

برای fetch کردنش هم به همون روش عادی کار کنید.

yeksib
جمعه 30 فروردین 1392, 10:46 صبح
SELECT `id`,`begin_city`,`name` AS `destination_city`
FROM (
SELECT `id`,`name` AS `begin_city`,`destination_id_city`
FROM `airport`
JOIN `cities`
ON `begin_id_city`=`cities`.`id_city`
) AS `temp`
JOIN `cities`
ON `destination_id_city`=`cities`.`id_city`

برای fetch کردنش هم به همون روش عادی کار کنید.

این کوئری واسه من که اجرا نشد ولی یک سوالی برای من پیش آمد در مورد همون fetch کردنش مثلا من وقتی میخواهم نام city رو بکشم بیرون اینطوری باید مقدار بدم دیگه !


while($row = mysql_fetch_array($resultb)) {
echo $row['city'];
}


حالا این چه طوری تشخیص میده که id شهر مبدا هستش و یا id شهر مقصد !؟

MMSHFE
جمعه 30 فروردین 1392, 11:10 صبح
دوست عزیز، اسم فیلدها begin_city و destination_city هست نه city. به کوئری دقت کنید و اون رو با ساختار دیتابیس خودتون تنظیم کنید. من از این کوئری هم جواب گرفتم. فکر کنم ساختار دیتابیس شما فرق میکنه و کوئری رو درست تنظیم نمیکنید. مثلاً من اسم جدول رو cities گذاشتم که شما باید city بگذارین. اینم نمونه خروجی که گرفتم:


+----+------------+------------------+
| id | begin_city | destination_city |
+----+------------+------------------+
| 1 | تهران | اردبیل |
| 2 | شیراز | تهران |
| 3 | بندرعباس | تهران |
| 4 | مشهد | بندرعباس |
+----+------------+------------------+
4 rows in set (0.01 sec)

(کد رو کپی کنید و توی Notepad بگذارین تا به شکل صحیح ببینید. ادیتور سایت بهم ریخته نشون میده.

yeksib
جمعه 30 فروردین 1392, 11:42 صبح
اصل دیتابیس هیمنه که پایین گذاشتم البته چون میخواستم بیشتر کار رو خودم انجام بدم و وقت شما رو نگیرم فقط قسمتی از سوالم رو مطرح کردم تا راهنماییم کنید ، حالا بذارید کوئری که قراره از این 4 تیبل گرفته بشه رو براتون شرح بدم !

ابتدا از جدول flights سه مقدار ذکر شده رو میخونه و در جدول flightinfo جست جو میکنه و سپس دو فیلد Begin_Airport | Destination_Airport رو در جدول airport جست و جو میکنه و سپس ID_CITY هر Airport رو میگره و دست آخر در جدول city جستو جو کرده و نام شهر هاش رو بیرون میکشه !؟

یعنی دست آخر ما برای هر ID از جدول flightinfo دو فیلد مقصد و مبدا خواهیم داشت که به خروجی میبریم !
اگه شما بتونید راهنمایی کنید ممنون میشم البته با INNER JOIN نوشتم ولی توی همون خروجی گرفتن فیلد ها با مشکل مواجه میشم .



flights:

ID | Begin_Airport | Destination_Airport
---------- --------------------- -------------------
1 | 2 | 2 |
2 | 1 | 3 |
3 | 1 | 2 |
4 | 3 | 1 |


flightinfo:

ID | ID_Flights |
---------- -------------
1 | 4 |
2 | 4 |
3 | 5 |
5 | 5 |
6 | 4 |



airport:
id | ID_CITY | Airport |
-----+-----------------+------------------
1 | 1 | مهر آباد |
2 | 2 | امام خمینی |
3 | 3 | امام علی |


city :
ID_CITY | NAME |
--------------- ---------------
1 | تهران |
2 | شیراز |
3 | اصفهان |

yeksib
شنبه 31 فروردین 1392, 16:56 عصر
خیلی ازتون ممنون میشم کمک کنید تا کوئری که بالا هستش رو بنویسم !