PDA

View Full Version : سوال: چطوری میشه فهمید کدام کاربر بیشترین پست با چه مقداری را ثبت کرده است



hamidhassas
جمعه 21 شهریور 1393, 13:19 عصر
من یک جدول دارم که در اون شماره id کاربران ثبت میشه حالا میخوام کاری کنم که اول چک کنه کدوم کاربران بیشترین مقدار ارسال اطلاعات رو داشتن دوم بهم بگه این مقدار چند هست؟



من میخوام کاری کنم 20 کاربری که بیشترین ارسال ها رو داشتن رو با تعداد پست هاشون نشون بده بعد میخوام بکاری کنم اگر کاربری بیش از 200 پست داشته مشخصاتش در ی جدول دیگه ثبت بشه


لطفا کدکامل رو بی زحمت برام بزارید

mohammad reza beizavi
جمعه 21 شهریور 1393, 14:21 عصر
درود بر شما
این همه کار رو می خوای انجام بدی که چی بشه، ولش کن:متفکر:

اگر توی این جدولی که دارید به ازای هر بار ارسال اطلاعات یک رکورد ثبت میشه که حتما حاوی id کاربر ارسال کننده هست مشکل حله. انتخاب 20 کاربری که بیشترین ارسال هارو داشتن به این صورته:
select TOP 20 userId as articleCount from Users
join UserArticles on Users.id = UserArticles.userId
group by userId
order by articleCount desc;
حالا اگه میخوای کلیه اطلاعات این کاربرا رو به دست بیاری اینجور بنویس:

SELECT * from Users WHERE id in
(
select userId,count(userId) as articleCount from Users
join UserArticles on Users.id = UserArticles.userId
group by userId
order by articleCount desc;
)





و دست آخر می خوای اطلاعات اونایی که بیشتر از 200 پست دارن رو بذاری توی یه جدول دیگه که البته به نظرم لزومی هم نداره رو اینجوری به دست بیار و بعد هر جا مایل بودی insert کن:


SELECT * from Users WHERE id in
(
select userId,count(userId) as articleCount from Users
join UserArticles on Users.id = UserArticles.userId
HAVING COUNT(userId) > 200
group by userId
order by articleCount desc;
)

Mohammadsgh
جمعه 21 شهریور 1393, 14:52 عصر
من یک جدول دارم که در اون شماره id کاربران ثبت میشه حالا میخوام کاری کنم که اول چک کنه کدوم کاربران بیشترین مقدار ارسال اطلاعات رو داشتن دوم بهم بگه این مقدار چند هست؟
من میخوام کاری کنم 20 کاربری که بیشترین ارسال ها رو داشتن رو با تعداد پست هاشون نشون بده بعد میخوام بکاری کنم اگر کاربری بیش از 200 پست داشته مشخصاتش در ی جدول دیگه ثبت بشه
لطفا کدکامل رو بی زحمت برام بزارید
دوست گرامی اگه ما برای شما کد بزاریم از دید شما,شما برنامه نویس میشید؟:لبخندساده:یه خورده هم تلاش کنید:لبخندساده:

hamidhassas
جمعه 21 شهریور 1393, 15:26 عصر
دوست گرامی اگه ما برای شما کد بزاریم از دید شما,شما برنامه نویس میشید؟:لبخندساده:یه خورده هم تلاش کنید:لبخندساده:
عزیز دلم هرکسی اول باید ی بار ی کدی ببینه بعد بهش کار کنه تا بفهمه چی به چیه بعد بتونه از اون الگو بگیره و کارای خودش رو حل کنه

دوما این سوالی که اینجا مطرح کردم برای ایجاد یک ip black list هست میخوام کاری کنم که اگر یک ip خاصی بیش از 200 بار در یک روز به صفحه لاگین اصلی مدیریت سایت وارد بشه و سعی به لاگین کنه ip اون تو یک جدول ریخته بشه بعد تا 3 روز نتونه اون به آدرس صفحه لاگین دسترسی پیدا کنه

افتاد عزیزم ( برنامه نویسی هم یادگیزی میخواد هم کمک دیگران هم تجربه هم دقت و هم هنر حل مسئله == برنامه نویس)



کاری که خود من انجام داده بودم این جوریه ببین:




$ip_address_check_01=mysql_query("SELECT `ip_address`,count(`ip_address`) as `count` FROM `statistic` where `date`='".$join_today."' and `robot`='1' group by `ip_address` having count(*) >= 1 ORDER BY `count` DESC LIMIT 0 , 1")or die(mysql_error());
$ip_address_check_02=mysql_query("SELECT `ip_address`,count(`ip_address`) as `count` FROM `statistic` where `date`='".$join_today."' and `robot`='1' group by `ip_address` having count(*) >= 1 ORDER BY `count` DESC LIMIT 1 , 1")or die(mysql_error());


$ip_address_01=mysql_fetch_array($ip_address_check _01);$ip_address_number_01=$ip_address_01['ip_address'];
$ip_address_02=mysql_fetch_array($ip_address_check _02);$ip_address_number_02=$ip_address_02['ip_address'];


$ip_address_robot_01=mysql_query("SELECT COUNT(*) as count FROM `statistic` where `ip_address`='".$ip_address_number_01."' and `robot`='1'")or die(mysql_error());
if(mysql_num_rows($ip_address_robot_01)!=0) {
$ip_robot_01=mysql_result($ip_address_robot_01,0,' count'); }
$ip_address_robot_02=mysql_query("SELECT COUNT(*) as count FROM `statistic` where `ip_address`='".$ip_address_number_02."' and `robot`='1'")or die(mysql_error());
if(mysql_num_rows($ip_address_robot_02)!=0) {
$ip_robot_02=mysql_result($ip_address_robot_02,0,' count'); }



if($ip_robot_01>=100)
{
$ip_address_black_list_01=mysql_query("SELECT * FROM `ip_black_list` WHERE `ip`='".mysql_real_escape_string($ip_address_number_01)."' ORDER BY `id` DESC");
$check_ip_black_list_01=mysql_num_rows($ip_address _black_list_01);
$ip_black_list_01=mysql_fetch_assoc($ip_address_bl ack_list_01);
if($check_ip_black_list_01>0 && str_replace('/','',$join_today)>=str_replace('/','',$ip_black_list_01['date_block']) && str_replace('/','',$join_today)<=str_replace('/','',$ip_black_list_01['date_unblock']))
{
}
else
{
$geopluginURL_01='http://www.geoplugin.net/php.gp?ip='.$ip_address_robot_01;
$addrDetailsArr_01=unserialize(file_get_contents($ geopluginURL_01));
$country_01=$addrDetailsArr_01['geoplugin_countryName'];
if($check_ip_black_list<1)
{
$add_ip_black_list_01=mysql_query("INSERT INTO `ip_black_list` (`ip`, `country`, `date_block`, `date_unblock`) VALUES ('".mysql_real_escape_string($ip_address_number_01)."', '".mysql_real_escape_string($country_01)."', '".mysql_real_escape_string($join_today)."', '".mysql_real_escape_string($date_blog)."')")or die(mysql_error());
}
}
}
if($ip_robot_02>=100)
{
$ip_address_black_list_02=mysql_query("SELECT * FROM `ip_black_list` WHERE `ip`='".mysql_real_escape_string($ip_address_number_02)."' ORDER BY `id` DESC");
$check_ip_black_list_02=mysql_num_rows($ip_address _black_list_02);
$ip_black_list_02=mysql_fetch_assoc($ip_address_bl ack_list_02);
if($check_ip_black_list_02>0 && str_replace('/','',$join_today)>=str_replace('/','',$ip_black_list_02['date_block']) && str_replace('/','',$join_today)<=str_replace('/','',$ip_black_list_02['date_unblock']))
{
}
else
{
$geopluginURL_02='http://www.geoplugin.net/php.gp?ip='.$ip_address_robot_02;
$addrDetailsArr_02=unserialize(file_get_contents($ geopluginURL_02));
$country_02=$addrDetailsArr_02['geoplugin_countryName'];
if($check_ip_black_list<1)
{
$add_ip_black_list_02=mysql_query("INSERT INTO `ip_black_list` (`ip`, `country`, `date_block`, `date_unblock`) VALUES ('".mysql_real_escape_string($ip_address_number_02)."', '".mysql_real_escape_string($country_02)."', '".mysql_real_escape_string($join_today)."', '".mysql_real_escape_string($date_blog)."')")or die(mysql_error());
}
}
}


من این کد رو 50 بار نوشتم که فقط بتونم کاری که میخوام بکنم



برای قضاوت عجله نکنید زیرا که همیشه آنطوری که شما می پندارید نیست

hamidhassas
جمعه 21 شهریور 1393, 16:27 عصر
$ip_address_check_01=mysql_query("SELECT `ip_address`,count(`ip_address`) as `count` FROM `statistic` where `date`='".$join_today."' and `robot`='1' group by `ip_address` having count(*) >= 1 ORDER BY `count` DESC LIMIT 0 , 1")or die(mysql_error());

$ip_address_01=mysql_fetch_array($ip_address_check _01);$
ip_address_number_01=$ip_address_01['ip_address'];

$ip_address_robot_01=mysql_query("SELECT COUNT(*) as count FROM `statistic` where `ip_address`='".$ip_address_number_01."' and `robot`='1'")or die(mysql_error());
if(mysql_num_rows($ip_address_robot_01)!=0) {
$ip_robot_01=mysql_result($ip_address_robot_01,0,' count'); }


if($ip_robot_01>=50)
{
$ip_address_black_list_01=mysql_query("SELECT * FROM `ip_black_list` WHERE `ip`='".mysql_real_escape_string($ip_address_number_01)."' ORDER BY `id` DESC");
$check_ip_black_list_01=mysql_num_rows($ip_address _black_list_01);
$ip_black_list_01=mysql_fetch_assoc($ip_address_bl ack_list_01);
if($check_ip_black_list_01>0 && str_replace('/','',$join_today)>=str_replace('/','',$ip_black_list_01['date_block']) && str_replace('/','',$join_today)<=str_replace('/','',$ip_black_list_01['date_unblock']))
{
}
else
{
$geopluginURL_01='http://www.geoplugin.net/php.gp?ip='.$ip_address_robot_01;
$addrDetailsArr_01=unserialize(file_get_contents($ geopluginURL_01));
$country_01=$addrDetailsArr_01['geoplugin_countryName'];
if($check_ip_black_list<1)
{
$add_ip_black_list_01=mysql_query("INSERT INTO `ip_black_list` (`ip`, `country`, `date_block`, `date_unblock`) VALUES ('".mysql_real_escape_string($ip_address_number_01)."', '".mysql_real_escape_string($country_01)."', '".mysql_real_escape_string($join_today)."', '".mysql_real_escape_string($date_blog)."')")or die(mysql_error());
}
}
}

Mohammadsgh
جمعه 21 شهریور 1393, 17:36 عصر
گفت شما درسته,اگه از حرف من دلخور و ناراحت شدید ازتون پوزش می خوام:لبخندساده:

mohammad reza beizavi
جمعه 21 شهریور 1393, 18:43 عصر
درود
یه توصیه کوچک اما مهم: همیشه وظیف کارهای دیتابیس رو به خود دیتابیس محول کنید. اینطور هم کارتون ساختاریافته تر میشه و هم اینکه سرعت اجرای کدها توسط و درون دیتابیس بسیار سریعتر از درون کدهای برنامه هست.
از stored procedure و یا routines استفاده کنید. پارامترها رو به sp پاس بدید و نتیجه رو برگردونید و استفاده کنید
شما که قرار نیست کدهای خودتون رو بخونیدو ویرایش کنید اما اینجور که شما کد می نویسید و از فریمورک خاصی هم استفاده نکردید نفر بعدی که می خواد روی کد کار کنه و یا حتی خودتون بعد از یه مدتی دیگه نمی تونید به سادگی کد رو بخونید و تغییرش بدید.

یه سوال هم بپرسم. تو آخرین مزلبی که گذاشتید نگفتی که مشکل حل شده یا نه و اگه حل نشده مشکل کجاست؟؟؟

mohammad reza beizavi
جمعه 21 شهریور 1393, 20:10 عصر
دیتابیس mysql هست؟؟؟

hamidhassas
شنبه 22 شهریور 1393, 03:21 صبح
دیتابیس هست؟؟؟

آره mysql هست


یه سوال هم بپرسم. تو آخرین مزلبی که گذاشتید نگفتی که مشکل حل شده یا نه و اگه حل نشده مشکل کجاست؟؟؟
من اصلا نتونستم از کدتون استفاده کنم ازش سر در نیاوردم چون نمیونم چی به چیه

hamidhassas
یک شنبه 23 شهریور 1393, 23:30 عصر
:متفکر::متفکر::متفکر:

mohammad reza beizavi
یک شنبه 23 شهریور 1393, 23:46 عصر
درود
آقا من فایل رو دیدم، متاسفانه نرسیدم کاری روش انجام بدم، توضیحاتی توش دادم، اما مشکل اینه که چون دیتابیس شما رو نمی دونم چیه از نظر ساختاری البته، نظری نمی تونم بدم.
چون خطایی توی کد php تون ندیدم. ولی متوجه نشدم چکار می خواید بکنید.
کامنتای توی فایل رو بخونید شاید متوجه بشید چی میگم...

hamidhassas
دوشنبه 24 شهریور 1393, 07:34 صبح
درود
آقا من فایل رو دیدم، متاسفانه نرسیدم کاری روش انجام بدم، توضیحاتی توش دادم، اما مشکل اینه که چون دیتابیس شما رو نمی دونم چیه از نظر ساختاری البته، نظری نمی تونم بدم.
چون خطایی توی کد php تون ندیدم. ولی متوجه نشدم چکار می خواید بکنید.
کامنتای توی فایل رو بخونید شاید متوجه بشید چی میگم...

آقا ممنون از اینکه وقت گذاشتی ولی این که کدی که خودم نوشتم هست که خودم میدونستم چیه منظورم این بود که کدی که من نوشتم تبدیل بشه به کد شما

درود بر شما
این همه کار رو می خوای انجام بدی که چی بشه، ولش کن:متفکر:

اگر توی این جدولی که دارید به ازای هر بار ارسال اطلاعات یک رکورد ثبت میشه که حتما حاوی id کاربر ارسال کننده هست مشکل حله. انتخاب 20 کاربری که بیشترین ارسال هارو داشتن به این صورته:
select TOP 20 userId as articleCount from Users
join UserArticles on Users.id = UserArticles.userId
group by userId
order by articleCount desc;
حالا اگه میخوای کلیه اطلاعات این کاربرا رو به دست بیاری اینجور بنویس:

SELECT * from Users WHERE id in
(
select userId,count(userId) as articleCount from Users
join UserArticles on Users.id = UserArticles.userId
group by userId
order by articleCount desc;
)





و دست آخر می خوای اطلاعات اونایی که بیشتر از 200 پست دارن رو بذاری توی یه جدول دیگه که البته به نظرم لزومی هم نداره رو اینجوری به دست بیار و بعد هر جا مایل بودی insert کن:


SELECT * from Users WHERE id in
(
select userId,count(userId) as articleCount from Users
join UserArticles on Users.id = UserArticles.userId
HAVING COUNT(userId) > 200
group by userId
order by articleCount desc;
)


اون کدی که من نوشتوم باید 200 بار تکرار کنم تا کاری که میخوام رو انجام بدم ولی کدی که شما با join نوشتید همه این کارا رو در 3 خط انگار انجام میده