PDA

View Full Version : سوال: چطور می شه تعداد آگهی های هر استان رو نمایش داد؟



idocsidocs
دوشنبه 20 آذر 1391, 16:20 عصر
توی سایتهای آگهی، توی بخش استانها اسم هر استان و تعداد آگهی هایی که برای اون استان ثبت شده رو نمایش می دن.

چطور می شه این کار رو انجام بدم؟

MRmoon
دوشنبه 20 آذر 1391, 16:59 عصر
خیلی ساده
با استفاده از بانک اطلاعاتی.(mysql)

شکا باید علاوه بر این که یک قسمت آگهی ثبت میشه یک تیبل هم درس کنین و از هر استان توی اون ثبت شه! یا از همون تیبل آگهی ها بشمرین!

با چند تا دستور ساده!

idocsidocs
دوشنبه 20 آذر 1391, 17:09 عصر
با چند تا دستور ساده!
حداقل چند خط کد می نوشتید !

navid3d_69
دوشنبه 20 آذر 1391, 17:10 عصر
خیلی ساده هست با شرط where کوئری رو محدود کنید

MRmoon
دوشنبه 20 آذر 1391, 17:25 عصر
نگا کن.

مثلا ما آگهی هارو تو تیبل agahi ذخیره میکنیم!

بعد تو تیبل count :
!تو فیلد khorasan وقتی استان خراسان آگهی ثبت میکنه +1 میکنیم.


حالا:


$result=mysql_query("SELECT * FROM `count`");
while ($row=mysql_fetch_assoc($result)){
echo "$row['khorasan']";
}

idocsidocs
دوشنبه 20 آذر 1391, 17:29 عصر
نمی خوام تعداد آگهی ها رو توی یه فیلد از جدول ذخیره کنم.

می خوام موقع نمایش صفحه استانها، موقع نمایش اسم هر استان، تعداد آگهی ها رو بشمارم و نمایش بدم.

Unique
دوشنبه 20 آذر 1391, 21:33 عصر
دوست عزیز معمولا وقتی آگهی را ذخیره میکنید توی پایگاه داده شما میدونید چه کسی آگهی داده و مربوط به چه استانی میشه ! مثلا کاربری به نام حمید دارین که توی profile کاربریش مشخص شده province (استان) او شیراز هست ، حالا وقتی کاربری میخواد آگهی های شیراز را ببینه شما باید یک Join بگذارین روی profile ارسال کننده های آکهی و اونهایی که از شیراز هستند را نمایش بدین یه همچین چیزی :


select a.title,a.date,u.name from agahi a inner join users u on u.id = a.user where u.province = 5 order by a.date desc

note : province [5 = شیراز]

برای شمارش هم همونه :


select count(*) from agahi a inner join users u on u.id = a.user where u.province = 5

البته با توجه به شناختی که از شما دارم بعید میدونم منظورتون این باشه ! چون خیلی راحته ، احتمالا شما میخواین کاربری که از شیراز میاد روی سات تشخیص بدین از شیراز هست یا هر استان دیگه.
در این مورد اگه کاربر عضو باشه میشه فهمید مال کجاست و خوب نمایش میدیم ! اما در غیر این صورت فقط از روی ip میشه ، این اسکریپت خروج اطلاعاتش راحته ، مثلا :

http://ipinfodb.com/ip_locator.php?ip=user_ip_address

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

idocsidocs
دوشنبه 20 آذر 1391, 22:28 عصر
سایت ایستگاه توی صفحه مربوط به استانها (http://www.istgah.com/province/)، هر استان و آخرین آگهی های هر استان رو نمایش می ده.

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

برای این منظور باید چیکار کنم؟

Unique
سه شنبه 21 آذر 1391, 03:36 صبح
من که دقیقا همین را اشاره کردم ! کجاش را متوجه نشدین ؟

idocsidocs
چهارشنبه 22 آذر 1391, 13:39 عصر
راستش کار با inner join رو بلد نیستم !

مسئله دیگه اینه که فرض من اینه که موقعیت آگهی توی جدولی آگهی ها ذخیره می شه.

برای این کار باید از چه نوع کوئری استفاده بشه؟

thacker
چهارشنبه 22 آذر 1391, 14:03 عصر
http://www.w3schools.com/sql/sql_join_left.asp

mamali-mohammad
چهارشنبه 22 آذر 1391, 14:52 عصر
دوتا حلقه توی هم بنویسی حل میشه
مثال :

sql=mysql_query("SELECT * FROM `ostan`");
while($row=mysql_fetch_array($sql)) {
$id=$row["id"];
$title=$row["title"];

sql1=mysql_query("SELECT * FROM `agahi` WHERE `ostan`='$id'");
while($row1=mysql_fetch_array($sql1)) {
$id1=$row1["id"];
$title1=$row1["title"];
$list .='<a href="agahi.php?id='.$id1.'">'.$title1.'</a>';
}
$last.='<h3>ostane : '.$title.'</h3><br />'.$list.'';
$list='';
}

soroush.elec
چهارشنبه 22 آذر 1391, 14:57 عصر
inner join رو یاد بگیر حتماً
بدردت می خوره خیلی.

Unique
چهارشنبه 22 آذر 1391, 16:14 عصر
دوست عزیز join از نون شب برای برنامه نویس web مهمتره (عجب تشبیهی شدا) ذر واقع شما هیچوقت نمیتونید بهینه سازی کنید query هاتون را و اگر بخواین به روشی که یکی از دوستان گفتند یعنی query توی حلقه استفاده کنید شاید برای چند تا رکورد بد نباشه اما مثلا برای 10000 رکورد باید 10000 تا query بدین و اگه cache هم نکنید که دیگه سایتتتون روی هواست. خلاصه join خیلی موضوع مهمی هستش و حتما یاد بگیرین.

اما در مورد کد شما ، ای کاش دقیق میگفتین ساختار جداول چطور هستند تا جواب آخر را میگرفتین اما باز هم اشکالی نیست. اگه میخواین فقط استانها و تعداد آگهی را نشون بدین :


select o.id,o.name,count(*) total from agahi a inner join ostanha o on o.id = a.ostan group by a.ostan;

اما اگه میخواین برای هر استان 4,5 تا آگهی آخر را هم نشون بدین توی while ی که دارین query بالا را میگذارین با این کوری اخری ها را همه بگیرین :


select a.title from agahi a where a.ostan = x order by date desc limit 5;

البته سعی کنید که cache کنین این خروجی را و با اضافه شدن آگهی ها cache را به روز کنید.

موفق باشین

idocsidocs
چهارشنبه 22 آذر 1391, 16:58 عصر
برای فریم ورک قدیمی که کدهاش رو به همه نشون می دادم یا سایتها رو با قیمت ارزون درست می کردم از join استفاده نمی کردم، چون فقط می خواستم تجربه کاریم رو ببرم بالا.

ولی توی کدهای جدید حتما استفاده می کنم.