PDA

View Full Version : انتخاب همزمان چند فیلد از دو تیبل



kamalhamidi
جمعه 27 آبان 1390, 18:04 عصر
سلام

من دوتا تیبل دارم که توی هر کدوم اطلاعات مختلفی قرار داره!

کاری که من میخوام بکنم اینه که مثلا 10 تا از فیلدهای تیبل اول رو انتخاب کنم و با استفاده از اطلاعات فیلدهای همان تیبل، بیام و یک فیلد از تیبل دوم رو انتخاب کنم. (البته در صورت وجود داشتن فیلد مورد نظر توی تیبل دوم)

کد من به صورت زیره:



SELECT `om_manga`.`link`,
`om_manga`.`cover`,
`om_manga`.`manganame`,
`om_chapter`.`chapter`,
`om_chapter`.`volume`
FROM `om_manga`,`om_chapter`
WHERE `om_chapter`.`manganame` = `om_manga`.`link`
AND `om_manga`.`Active`='1'
ORDER BY `om_manga`.`viewed` DESC
LIMIT 10


این کد میاد فیلدهای تیبل اول رو انتخاب میکنه و بعد به اندازه فیلدهای تیبل دوم ادامه شون میده!

مثلا اگه توی تیبل دوم چهارتا فیلد مربوط به تیبل اول داشتم، کد بالا میادی چهارتا فیلد رو انتخاب میکنه.. در حالی که من میخوام از تیبل دوم فقط یک فیلد انتخاب کنه و از تیبل اول به اندازه تعداد limit ها.

از LEFT JOIN هم استفاده کردم اما باز نتیجه یکی بود!

کد معمولی php من به صورت زیره:



$query = mysql_query("SELECT `link`,`cover`,`manganame` FROM `om_manga` WHERE `Active`='1' ORDER BY `viewed` DESC LIMIT ".$options['number_of_popular_manga']); //
while($row = mysql_fetch_array($query)){
$rww = mysql_fetch_array(mysql_query("SELECT `chapter`,`volume`,`manganame` FROM `om_chapter` WHERE `manganame`='".sql_quote($row['link'])."' AND `Active`='1' ORDER BY `etime` DESC LIMIT 1")); //
if (isset($rww['chapter'])) $volchap = '<a href="read.php?manga='.$row['link'].'&amp;chap='.$rww['chapter'].'">Vol.'.$rww['volume'].' CH.'.$rww['chapter'].'</a>'; else $volchap = '';
echo '<li class="index-right-ul-li"><img onerror="this.src=\'images/noimage.jpg\'" src="images/info/'.$row['cover'].'" width="30" height="33"/><div class="index-right-ul-div"><p class="index-right-ul-div-tital"><a href="manga.php?manga='.$row['link'].'">'.htmlspecialchars($row['manganame'], ENT_QUOTES).'</a></p><p class="index-right-ul-div-chapter">'.$volchap.'</p></div></li>';
}



حالا من چیکار کنم که به جای استفاده از دوتا کوری از یک کوری توی کد بالا استفاده کنم!؟


تشکر!

pejman_view
شنبه 28 آبان 1390, 00:09 صبح
سلام

فرض کنید من جداول زیر رو در بانک اطلاعاتی داشته باشم:

جدول Persons :


P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger

جدول Orders :


O_Id OrderNo P_Id 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 15

حالا من با استفاده از JOIN LEFT در mysql هر دو جدول رو با هم یکی کرده و کوئری خودمو تولید می کنم:


SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName


خروجی دریافتی از اجرای این درخواست:
LastName FirstName OrderNo Hansen Ola 22456 Hansen Ola 24562 Pettersen Kari 77895 Pettersen Kari 44678 Svendson Tove

aghasoroush
شنبه 28 آبان 1390, 00:21 صبح
دوست من شما بی زحمت جداولتون و محتویاتش رو بگین تا کد رو بدم خدمتتون اگه در توانم باشه

kamalhamidi
شنبه 28 آبان 1390, 15:14 عصر
سلام


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




جدول من به صورت زیره:

جدول om_manga:



id | link | manganame | viewed | cover
1 | naruto | naruto | 11215 | img.jpg
2 | bleach | bleach | 32442 | img.jpg
3 | one piece | one_piece | 11215 | img.jpg
4 | gents | gents | 4334 | img.jpg



جدول om_chapter:

id | manganame | chapter | volume
1 | naruto | 1 | 1
2 | naruto | 2 | 1
3 | naruto | 3 | 1
4 | bleach | 1 | 1
5 | bleach | 2 | 1
6 | gents | 1 | 1



چیزی که من میخوام اینجوریه، مثلا از جدول om_manga دو تا فیلد رو انتخاب میکنیم: naruto و bleach

حالا بیاد از جدول om_chapter آخرین فیلدی که مربوط به naruto و bleach است رو انتخاب کنه.

دقت کنید که میخوام آخرین فیلد رو انتخاب کنه، نه سه تا موجود در جدول om_chapter !!!

که به صورت زیر میشه :


id | link | manganame | viewed | cover | chapter | volume
1 | naruto | naruto | 11215 | img.jpg | 3 | 1
2 | bleach | bleach | 32442 | img.jpg | 2 | 1





سلام

فرض کنید من جداول زیر رو در بانک اطلاعاتی داشته باشم:

جدول Persons :


P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavangerجدول Orders :


O_Id OrderNo P_Id 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 15حالا من با استفاده از JOIN LEFT در mysql هر دو جدول رو با هم یکی کرده و کوئری خودمو تولید می کنم:


SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName


خروجی دریافتی از اجرای این درخواست:
LastName FirstName OrderNo Hansen Ola 22456 Hansen Ola 24562 Pettersen Kari 77895 Pettersen Kari 44678 Svendson Tove

من از left join استفاده کردم اما درست جواب نداد، یعنی از om_manga فیلدها رو درست انتخاب میکرد اما از جدول om_chapter نمیومد آخرین فیلد رو انتخاب کنه، بلکه همه رو انتخاب میکرد! البته من زیاد از شرط گذاری چیزی بلد نیستم.

کدی هم که استفاده کردم این بود:


SELECT `om_manga`.`link`,`om_manga`.`cover`,`om_manga`.`l ink`,
`om_chapter`.`chapter`,`om_chapter`.`volume`,`om_c hapter`.`manganame`
FROM `om_manga`
LEFT JOIN `om_chapter` ON `om_manga`.`link` = `om_chapter`.`manganame`
WHERE `om_manga`.`Active`='1'
ORDER BY `om_manga`.`viewed` DESC LIMIT 10


در واقع کد بالا فقط شرط گذاری میخواد تا تنها آخرین فیلد مربوطه رو انتخاب کنه..

Net So
شنبه 28 آبان 1390, 17:08 عصر
دوست عزیز درست متوجه شده باشم این کمکتون میکنه :

SELECT * FROM om_manga , om_chapter WHERE (om_manga.manganame = om_chapter.manganame) ORDER BY `om_chapter.id` DESC LIMIT 0,1

در عبارت بالا هم شما Limit تون رو 0,1 کنید حل میشه.

kamalhamidi
شنبه 28 آبان 1390, 17:21 عصر
دوست عزیز درست متوجه شده باشم این کمکتون میکنه :

SELECT * FROM om_manga , om_chapter WHERE (om_manga.manganame = om_chapter.manganame) ORDER BY `om_chapter.id` DESC LIMIT 0,1

در عبارت بالا هم شما Limit تون رو 0,1 کنید حل میشه.

سلام

متسفانه چیزی که من میخوام این نیست! کد بالا از هر دوتا جدول به یه اندازه فیلد انتخاب میکنه! در حالی که من میخوام از جدول اولی مثلا 10 تا و از جدول دومی فقط یکی انتخاب بشه!

kamalhamidi
شنبه 28 آبان 1390, 19:57 عصر
با سلام

من با انگلیسی دست و پا شکسته ایی که داشتم، مشکلم رو توی فرم انگلیسی مطرح کردم

لذا جواب مشکل من توی لینک زیر است:

http://stackoverflow.com/questions/8194940/mysql-select-two-tables-with-different-limit

امیدوارم به درد کسی بخوره!