نمایش 2 تیبل در یک query بدون تکرار

MnavidM

Active Member
سلام.

من می خوام توسط یه Query از دو تا Table خروجی بگیرم که فیلد هاشون هیچ ربطی به هم نداره به این صورت که

مثلا table1 شامل :

کد:
name 	age
_____________
Hamid	20
Reza	26
Abbas	15
Ali	48
Naser	10

و table2 شامل :

کد:
City 	Type
_____________
Tehran	5
Shiraz	6
Tabriz	8

و در نهایت می خوام نتیجه به این صورت بشه (البته با یه Query) :

کد:
name 	age	City 	Type
_____________________________
Hamid	20	Tehran	5
Reza	26	Shiraz	6
Abbas	15	Tabriz	8
Ali	48
Naser	10

با تشکر از جواب شما.
نوید.
 

I.NoBody

Active Member
فکر کنم با استفاده از کلمه کليدي join بتوني اين کارو انجام بدي
 

MnavidM

Active Member
join مال وقتی هست که فیلد مشترک داشته باشیم . (تا اونجایی که من میدونم)

به خروجی که در آخر پستم نوشتم نگاه کن , می خوام خروجی اون جوری باش.

نوید.
 

mosi20

Active Member
سلام
ببین چرا این کار را میکنی؟
میتونی به جای اینکار جلوی تیبل اولت یک فیلد به اسم cityid درست کنی و در آن id مربوط به city را وارد کنی.
برای گرفتن خروجی میتونی اونجایی که میخواهی city را نشون بدی یه query دیگه بگیری به صورت زیر

PHP:
//set finde citys//
$findecity = mysql_query("SELECT * FROM `table2` WHERE id='{$row['cityid']}'") or die(mysql_error());
//set $citys to findecity //
$citys = mysql_fetch_array( $findecity ); 
print''.$citys['city'].'';
 

I.NoBody

Active Member
آو ببخشيد. فهميدم چي مي خواي. ميشه ولي الآن دقيقاً يادم نيست. تا 3و4 ساعت ديگه بهت مي گم. ولي بدون که به راحتي ميشه.
 

MnavidM

Active Member
mosi20 گفت:
سلام
ببین چرا این کار را میکنی؟
میتونی به جای اینکار جلوی تیبل اولت یک فیلد به اسم cityid درست کنی و در آن id مربوط به city را وارد کنی.
برای گرفتن خروجی میتونی اونجایی که میخواهی city را نشون بدی یه query دیگه بگیری به صورت زیر

PHP:
//set finde citys//
$findecity = mysql_query("SELECT * FROM `table2` WHERE id='{$row['cityid']}'") or die(mysql_error());
//set $citys to findecity //
$citys = mysql_fetch_array( $findecity ); 
print''.$citys['city'].'';
سلام.

ممنون مسعود جان .

اما ببین : من میگم این 2 تا table نمی خوام هیچ وابستگی به هم داشته باشن , وگرنه کاری اون طوری کاری نداشت ...

جناب I,NoBody ممنون از کمکتون . منتظرم .

نوید.
 

mosi20

Active Member
آقا من محسن هستم . مسعود دیگه کیه؟
نوید توی تور قبلی منو دیدی من خوب تورو یادمه . منو یادت نیست؟
شرمندتم که نمیتونم کمکت کنم .
اما وایسا یه چیزی به ذهنم خطور کرد.
از limit ستفاده کن .
یعنی اول تعداد نتیجه های تیبل یک را بگیر و بعدش از تیبل 2همون مقدار را فرا بخون.

PHP:
//find table1 number //
$result = mysql_query("SELECT * FROM `table1`") or die(mysql_error()); 
$numberoftableone=mysql_numrows($result);
//going to show from table2//
$findlinimtnumber = mysql_query("SELECT * FROM `tabl2` LIMIT 0  , $numberoftableone") or die(mysql_error());
while ($tabletwe = mysql_fetch_array( $findlinimtnumber )){
print''.$tabletwe['city'].'';
}
 
آخرین ویرایش:

golden

Member
select name , age , city , type from tbl1,tbl2
query بالا تنها راه انتخاب بی رابطه فیلدهای دو تیبله ولی این کار باعث میشه که تعداد بسیار زیادی Row بی فایده خونده بشه یعنی به ازای هر record از tbl1 تمام record های tbl2 را در کنار آن نشان میده به علاوه این کار بسیار طول می کشه.
فکر کنم اگه توضیح بدی برای چه منظوری می خوای این کار را بکنی بهتر بشه کمکت کرد.
 

MnavidM

Active Member
سلام.

ممنون محسن(ميبخشي اشتباهي اسمت رو گفتم) جان اما ببين .

خروجي كه من دادم رو ببين .

مي خوام خروجي دقيق مثل اون باشه يعني اون مقادير در table1 تا وقتي هست چاپ بشه و در table2 هم به همين صورت .

يعني همين طور كه در بالا ديديد table1 داراي 5 ركورد هست كه اون ها بايد كامل چاپ بشه و table2 هم داراي 3 ركورد هست كه به موازات ركورد هاي table1 چاپ ميشن و اگر مثل بالا تعداد ركورد هاي tabel2 از table1 كمتر بود :

1- يا يه مقدار پيش فرض به جاي اون ها چاپ بشه .
2- يا همون طوري بمونه و هيچي چاپ نشه .

golden جان بله اين روش select name , age , city , type from tbl1,tbl2 رو قبلا امتحان كردم و مي دونم خروجيش چي ميشه , براي همين اين تاپيك رو زدم كه يه query درست بهم بديد :wink:


با تشكر.
نويد.
 

miladmovie

Active Member
اهم
یک دستور بود به نام select تو در تو ! ولی یادم نیست چی کار می کرد و یادم نیست چه طوری بود !! دوتا select رو با هم توی یک پرسجو می نوشتی

راستی می خواهی چی کار کنی ؟ هرچی فکر کردم نفهمیدم ! چند رکورد که به هم ربطی ندارند
 

MnavidM

Active Member
miladmovie گفت:
اهم
یک دستور بود به نام select تو در تو ! ولی یادم نیست چی کار می کرد و یادم نیست چه طوری بود !! دوتا select رو با هم توی یک پرسجو می نوشتی

راستی می خواهی چی کار کنی ؟ هرچی فکر کردم نفهمیدم ! چند رکورد که به هم ربطی ندارند
سلام.

آره میلاد جان , احتمالا اون طوری بشه (کسی در این مورد آگاهی نداره ؟)

در مورد استفاده :

ببینید برای من این syntax که در این روش از query استفاده میشه , مهم هست و در اصل تصمیم ندارم این در زبون php به کار ببرم .

در کل سوالم روی خود query هست نه زبان برنامه نویسی دیگه ای ...

ممنون از راهنمایی شما .
نوید.
 

golden

Member
فکر کنم آقا میلاد منظورش sub-query باشه ولی من که فکر نمی کنم با sub-query بشه......
 

golden

Member
ببین من یه راه ارائه می کنم که کار میکنه ولی شاید بهترین راه نباشه.
برای هر کدم از tbl ها یه field به نام id از نوع auto_increment اضفه کن، بد از این query استفاده کن:
کد:
select name, age , city , type from tbl1 left  join tbl2
اگه تعداد record های tbl2 از tbl1 بیشتر بود باید از right join به جای left join استفاده کنی.
 

MnavidM

Active Member
سلام.

golden جان ای ول . خیلی ممنون .

میلاد جان , اون دستور جوجو داره , به درد من نمیخوره :wink:
 

golden

Member
بگذار من بگم جوجوی دستور میلاد چیه:
اگه یکی از tbl ها بیش از دیگری record داشته باشه به تعداد کل record های tbl دیگه row تکراری خواهیم داشت.
 

MnavidM

Active Member
golden گفت:
بگذار من بگم جوجوی دستور میلاد چیه:
اگه یکی از tbl ها بیش از دیگری record داشته باشه به تعداد کل record های tbl دیگه row تکراری خواهیم داشت.
سلام.

منم دقیقا منظورم همین بود :wink:

موفق باشی.
نوید.
 

جدیدترین ارسال ها

بالا