یک سوال کمی پیچیده در مورد SELECT در mysql

با سلام خدمت تمام دوستانی که قصد دارن به بنده کمک کنن و سایر کاربران.
فرض کنید ما دو جدول داریم.توی جدول اولی سه سطر رو با یه SELECT انتخاب می کنیم و ID های اونها رو که توی یه فیلد مشخص شده به دست میاریم.
PHP:
$row[0]
حالا یه جدول دیگه داریم که هم شماره ی همون ID ها که توی جدول قبلی انتخاب شده توی این جدول هم هست.انتخاب این سطر ها کار ساده ای هستش ولی ما میخواییم بقیه ی سطر ها رو انتخاب کنیم و سطر هایی که شامل ID های مساوی با جدول قبلی هستن رو نمایش ندیم(یعنی از نمایش حذف کنیم.)
خب راه حلی برای این موضوع دارید دوستان ؟
 

sibetorsh

Member
کد:
[LEFT]SELECT b.id FROM b WHERE b.id NOT IN(SELECT a.id FROM a WHERE ??? )
[/LEFT]
به جای ؟؟؟ شرطی که می خوای سه تا رکورد از جدول اولی (a) انتخاب بشوند رو بزار.
 
انگار من منظورم رو خوب نرسوندم ! بذارید با عکس توضیح بدم :
جدول شماره 1 :
نام جدول = test
عکس جدول در mysql :
alamto_13298326091.jpg

و حالا جدول دوم :
نام جدول : information
عکس جدول در mysql :
alamto_13298327471.jpg

خب حالا اگه دقت کنید ستون inform شامل اعدادی هستش که از ID جدول test انتخاب شده.
حالا ما یه فایل show.php میسازیم و با دادن آدرس show.php?id=26 یه عدد برای انتخاب id توی جدول information میدیم (همونطور که گفتم $id = 26 میشه)
حالا کد صفحه رو نشون میدیم :
PHP:
<?
$db = mysql_connect("localhost" , "root" , "");
mysql_select_db("form",$db);
$sql="SELECT * FROM information WHERE id=$id";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
while($rows=mysql_fetch_array($result)){
$sql2="SELECT * FROM test WHERE id='$rows[2]'";
$result2=mysql_query($sql2);
$count=mysql_num_rows($result2);
while($rows2=mysql_fetch_array($result2)){
echo "<a href='Showing.php?id=".$rows2[0]."'>".$rows2[1]."</a>,";
}
}
?>
خب حالا می بینید که این کد از جدول information ستون هایی که شامل id=26 هستند رو انتخاب می کنه و مقدار داخل inform که شامل اعداد 2 و 3 هستش رو برمیگردونه.حالا ما با یه while با این اعداد search توی جدول test انجام میدیم و سطر هایی که id اونها 2 و 3 هستش رو انتخاب می کنیم و فیلد matn رو برای هر سطر نشون می دیم.
سوال ما الان از اینجا شروع میشه : خب حالا کد ما سطر هایی که id مساوی 2 و 3 بود رو توی جدول test انتخاب کرد.حالا سطر هایی با id های 1 و 4 و 5 مونده.حالا میخواییم کدی بنویسیم که بعد از نمایش سطر هایی که id شامل 2 و 3 بود بقیه ی سطر ها که شامل 1 و 4 و 5 هستش رو نمایش بده.
خب راه حل شما چیه ؟؟؟؟؟؟
 
آخرین ویرایش:
یه نکته هم میمونه که تعداد سطر های انتخاب شده توی هر query ما وابسته به $id هستش که ما توی آدرس از کاربر میگیریم.مثلا اگر id عدد 24 بود توی جدول test با توجه به inform توی جدول information سطر هایی نمایش داده میشه که id اون ها 2 و 4 هستش.
فکر نمی کنم ساده تر از این توضیح داد ! امیدوارم دوستان عزیز بتونن بهم کمک کنن.
متشکر.
 

sibetorsh

Member
ساختار دیتابیست ایراد داره!
چرا while تو در تو استفاده کردی؟؟؟؟؟
یه مقدار که رکورد های دیتابیست زیاد بشه. سایت دیگه بالا نمیاد.
این کار رو باید توسط select های تو در تو انجام بدی تا بهینه باشه!
شما اول میای رکور 2 و3 رو نشون میدی بعد میخوای 1و4و5 رو هم نشون بدی؟ این جوری می خوای همه رکورد ها رو نشون بدی دیگه!
حالا هدفت از این کار رو بگو تا کمکت کنم.
 
واقعا لازم دارم ولی نمیدونم چطور انجامش بدم.ما نتایج رو که از جدول test میگیریم توی چک باکس میذاریم و اینطوری نمایش میدیم که :
وقتی رکورد 2 و 3 هستش چک باکس نمایشی دارای مقدار checked = "checked" هستش.
ولی وقتی باقی رکورد ها که 1 و 4 و 5 هستش رو نمایش میدیم چک باکس ما انتخاب نشده هستش.
بذارید یه عکس هم از نتیجه ی مورد نظر نمایش بدیم :
alamto_13298354521.jpg

امیدوارم منظورم رو رسونده باشم.
حالا میگین چیکار باید کرد ؟
 
آخرین ویرایش:

sibetorsh

Member
این قسمت اول (یعنی رکورد 2 و 3)
کد:
 select * from test where id in (select id form information where id=$id))
برای رکوردهای 4 و 5 هم همون دستوری که اول گفتم رو استفاده کن.
 
ممنون از پاسخگوییتون ولی :
من این کار رو کردم ولی چاو نمیکنه.کدی که استفاده کردم :
PHP:
$sql2="select * from test where id in (select id form information where id=$id))";
$result2=mysql_query($sql2);
$count=mysql_num_rows($result2);
while($rows2=mysql_fetch_array($result2)){
echo $rows2[1];
}
پیغام خطایی که نمایش داده میشه :
کد:
[B]Warning[/B]:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in [B]c:\appserv\www\updatepost.php[/B] on line [B]107[/B]

[B]Warning[/B]:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in [B]c:\appserv\www\updatepost.php[/B] on line [B]108[/B]
راه حلتون چیه ؟!!!!
 
بله $id توی آدرس صفحه به صورت 26 داده شده و خط هایی که پرسیدین :
کد:
[LEFT]$count=mysql_num_rows($result2); خط 107
while($rows2=mysql_fetch_array($result2 )){ خط 108[/LEFT]
خب راه حل ؟ :-?
 
اگه بهتر بگم میگه selec که ما انجام میدیم نتیجه ای نداره که بشه با mysql_num_rows تعداد سطر هاش و mysql_fetch_array آرایه هاش رو استخراج کرد.
؟؟؟؟ :-?
 

sibetorsh

Member
کد:
		 			[COLOR=#000000] [COLOR=#0000BB]$sql2[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"select * from test where id in (select id form information where id='$id'))"[/COLOR][COLOR=#007700];[/COLOR][/COLOR]

while($rows2=mysql_fetch_array($result2,MYSQL_ASSOC)){
 
لازم به ذکر می دونم اصلا مشکل توی نمایش نیست.نظر شخصی من اینه که توی select مشکلی وجود داره.یه سوال : mysql از ورژن چند میتونه SELECT های تو در تو رو پشتیبانی کنه ؟!
 
همون خطا ظاهر میشه.داداش گلم من فکر می کنم دلیل این خطا SELECT هستش.من هم قبلا از همین کد استفاده کردم و با پیغام خطا مواجه شدم.چون این SELECT فقط یک سطر رو انتخاب میکنه.اون هم سطری هستش که توی test هستش و id اون با inform توی جدول information مساوی هستش.دیگه نمیشه از به صورت چاپ استفاده کرد.ولی خب اگه راه حلی داره من سراپا گوش هستم.
 

sibetorsh

Member
این آخری رو تست کردی؟؟
این میاد inform هایی که id=$id هست رو بر می گردونه (یعنی 2 و3)
select inform form information where id='$id'
اونهایی رو بر می گردونه عضوی از select قبل یعنی 2 و3 باشه
$sql2="select * from test where id in (select inform form information where id='$id'))";
 
آره داداش گلم که اینهمه بهت زحمت دادم و داریم کمکم میکنی.
میدونی خروجی select inform form information where id='$id' میشه 23 نه اینکه 2 و 3 برای همین توی SELECT از جدول test هم دچار مشکل میشه و هیچ نتیجه ای وجود نداره که سطر ها رو با while نشون بده.
واسه همین من از while تو در تو استفاده کردم.
حالا به نظرت راه حل چیه ؟!!!!
 

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

بالا