PDA

View Full Version : سوال: کمک برای ایجاد لیست بهترین ها ( یکم پیچیده شده ! )



mamali-mohammad
شنبه 15 بهمن 1390, 13:25 عصر
سلام
من یه جدول دارم به نام rate
در این جدول 4 عدد ذخیره میشه . 3 تاش مربوط به a و b و c هست و یکیش میانگین این 3 تا
حالا هر کاربر می تونه رای بده به مطلب و بعد از رای دادن ip رو ذخیره میکنیم که دوباره نتونه رای بدی
از طرفی یه گزینه pid داریم که شماره مطلب رو ذخیره میکنه
مثلا 10 تا ای پی متفاوت رای دادن و pid اینها مثلا 36 هست
یعنی به مطلب 36 تعداد 10 نفر رای دادن
حالا من باید بیام هر pid رو جداگانه جمع میانگین رو حساب کنم تقسیم بر تعداد کنم تا میانگین کلی بدست بیاد
بعدش باید pid هار رو که بالاترین میانگین دارن رو در بیارم و pid رو برابر با id مطلب که در جدول send قرار داره قرار بدم و مطلب رو بکشم بیرون
یعنی باید دو تا جدول رو یه جوری مرتبط به هم کنم
چطوری این کارو کنم ؟
ممنون

MMSHFE
شنبه 15 بهمن 1390, 16:33 عصر
میشه یکم بیشتر درمورد فیلدهای این جدول که گذاشتین توضیح بدین؟ a و b و c چی هستن؟ همون design و work و com توی جدول فوق هستند؟ منظورتون خوب/متوسط/بد هست؟ اگه اینطور باشه میانگین گرفتن از اینها معنا نداره چون کاربر فقط یکی از اینها رو برای هر مطلب انتخاب میکنه. لطفاً بیشتر توضیح بدین تا بهتر راهنمایی کنم.

mamali-mohammad
شنبه 15 بهمن 1390, 17:52 عصر
میشه یکم بیشتر درمورد فیلدهای این جدول که گذاشتین توضیح بدین؟ a و b و c چی هستن؟ همون design و work و com توی جدول فوق هستند؟
بله
خب ببینید 3 تا کشو هست
مثلا طرف به طراحی 3 میده ، به راحتی 10 میده و به کارایی 7 میده
خب اینارو یه کاربر انتخاب می کنه و میانگین این 3 تا مورد بررسی ما هست
مثلا 10 تا کاربر رای میدن ما به میانگین هر کاربر کار داریم و دیگه نیاز به اون سه تا گزینه نیست

MMSHFE
شنبه 15 بهمن 1390, 18:11 عصر
خوب برای محاسبه میانگین هر مطلب میتونید از دستورات SQL استفاده کنید:

SELECT `pid`,AVG((SUM(`design`)+SUM(`work`)+(SUM(`com`))/3) AS `average` FROM `rate` GROUP BY `pid`

mamali-mohammad
شنبه 15 بهمن 1390, 18:53 عصر
میشه حلقشو کامل بنویسید ؟
ممنون میشم

MMSHFE
شنبه 15 بهمن 1390, 19:01 عصر
حلقه خاصی نداره. این دستوری که گفتم، اون چیزی که میخواین رو بر میگردونه. حالا کافیه با یک حلقه while، یکی یکی رکوردهایی که برگردونده رو fetch کنید. توی هر رکورد، pid و میانگین امتیازات داده شده به اون pid رو به شما اعلام میکنه. مثال:

$query = 'SELECT `pid`,AVG((SUM(`design`)+SUM(`work`)+(SUM(`com`))/3) AS `average` FROM `rate` GROUP BY `pid`';
$result = mysql_query($query);
if($result && mysql_num_rows($result) > 0) {
while($row = mysql_fetch_assoc($result)) {
echo '<p>'.$row['pid'].' => '.$row['average'].'</p>'."\n";
}
}

mamali-mohammad
شنبه 15 بهمن 1390, 19:11 عصر
من این کد رو گذاشتم
اما نه خروجی و نه ارروی میده

MMSHFE
شنبه 15 بهمن 1390, 19:35 عصر
این چطور؟


<!doctype html>
<html>
<head>
<title>Test</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$query = 'SELECT `pid`,AVG((`design`+`work`+`com`)/3) AS `average` FROM `rate` GROUP BY `pid`';
$result = mysql_query($query);
if($result && mysql_num_rows($result) > 0) {
while($row = mysql_fetch_assoc($result)) {
echo '<p>'.$row['pid'].' => '.$row['average'].'</p>'."\n";
}
}
else {
echo mysql_error();
}
?>
</body>
</html>

دستور SQL رو یکم تغییر دادم. شرمنده قبلش تست نکرده بودم. این یکی کار میکنه.

mamali-mohammad
شنبه 15 بهمن 1390, 20:50 عصر
ممنونم
ردیف شد