PDA

View Full Version : سوال: درخواست کوئری برای نمایش بیشترین رکورد در بانک



yasgig
سه شنبه 07 دی 1389, 11:41 صبح
با سلام
من توی سیستم وبلاگ دهی می خوام 5 وبلاگی که بیشترین پست رو دارند نمایش بدم.من یک table دارم با نام posts که توی اون پست های کلیه کاربران ذخیره میشه.توی هر رکورد نام وبلاگ به طور مثال ali،عنوان پست و محتوای پست ذخیره میشه.حالا می خوام بدونم کدوم وبلاگ بیشترین پست رو داره تا به عنوان وبلاگ برتر معرفی کنم.از دوستان می خواستم بپرسم کوئری این چجوری میشه.در ضمن بانک اطلاعات mysql هست.
با تشکر

afee1990
سه شنبه 07 دی 1389, 13:22 عصر
SELECT blogname,count(postid) AS p FROM posts GROUP BY blogname ORDER BY p

ghasemweb
سه شنبه 07 دی 1389, 13:25 عصر
البته كه راههاي بيشماري هست ولي به نظر من معقولش اين هست كه شما يك جدول براي شمارش تعداد پست ها داشته باشيد براي مثال وبلاگ ali تعداد پست هاش n تا هست و در هر نوبت درج پست و حذف يك مقدار به است فيلد كم يا زياد كن.

maysam.m
سه شنبه 07 دی 1389, 13:28 عصر
سلام

فکر کنم با دستور max در mysql بشود همچین کاری کرد:

http://www.tizag.com/mysqlTutorial/mysqlmax.php

yasgig
سه شنبه 07 دی 1389, 16:43 عصر
SELECT blogname,count(postid) AS p FROM posts GROUP BY blogname ORDER BY p
ممنون از همه دوستان.کد بالا کار نکرد.


البته كه راههاي بيشماري هست ولي به نظر من معقولش اين هست كه شما يك جدول براي شمارش تعداد پست ها داشته باشيد براي مثال وبلاگ ali تعداد پست هاش n تا هست و در هر نوبت درج پست و حذف يك مقدار به است فيلد كم يا زياد كن.


درسته بهترین راه همینه ولی دیگه کار از کار گذشته.تعداد کاربرا خیلی زیاده و اگه این کارو بکنم کاربرای قبلی پستشون صفر نشون داده میشه.

فکر کنم با دستور max در mysql بشود همچین کاری کرد:
اولش خودم با همین روشی که شما میگید کار میکردم ولی رکورد رو اشتباه نشون میداد:

SELECT *, MAX(weblog) FROM posts group by weblog order by weblog desc limit 5
ساختار جدول posts به این صورته:

CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) NOT NULL auto_increment,
`bid` int(11) NOT NULL default '0',
`usern` text collate latin1_general_ci NOT NULL,
`weblog` text collate latin1_general_ci NOT NULL,
`ptitle` text collate latin1_general_ci NOT NULL,
`pkeys` text collate latin1_general_ci NOT NULL,
`ptext` text collate latin1_general_ci NOT NULL,
`pextext` text collate latin1_general_ci NOT NULL,
`pcomment` text collate latin1_general_ci NOT NULL,
`pcat` text collate latin1_general_ci NOT NULL,
`ptime` text collate latin1_general_ci NOT NULL,
`pdate` text collate latin1_general_ci NOT NULL,
`ppas` text collate latin1_general_ci NOT NULL,
`ppasm` text collate latin1_general_ci NOT NULL,
`phits` int(11) NOT NULL default '0',
`votea` int(11) NOT NULL,
`voteb` int(11) NOT NULL,
`status` text collate latin1_general_ci NOT NULL,
`ptags` text collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2877 ;
از دوستان کسی میتونه واسم ویرایش کنه؟

Vahid Faraji
سه شنبه 07 دی 1389, 23:49 عصر
ممنون از همه دوستان.کد بالا کار نکرد.

درسته بهترین راه همینه ولی دیگه کار از کار گذشته.تعداد کاربرا خیلی زیاده و اگه این کارو بکنم کاربرای قبلی پستشون صفر نشون داده میشه.

اولش خودم با همین روشی که شما میگید کار میکردم ولی رکورد رو اشتباه نشون میداد:

SELECT *, MAX(weblog) FROM posts group by weblog order by weblog desc limit 5
ساختار جدول posts به این صورته:

CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) NOT NULL auto_increment,
`bid` int(11) NOT NULL default '0',
`usern` text collate latin1_general_ci NOT NULL,
`weblog` text collate latin1_general_ci NOT NULL,
`ptitle` text collate latin1_general_ci NOT NULL,
`pkeys` text collate latin1_general_ci NOT NULL,
`ptext` text collate latin1_general_ci NOT NULL,
`pextext` text collate latin1_general_ci NOT NULL,
`pcomment` text collate latin1_general_ci NOT NULL,
`pcat` text collate latin1_general_ci NOT NULL,
`ptime` text collate latin1_general_ci NOT NULL,
`pdate` text collate latin1_general_ci NOT NULL,
`ppas` text collate latin1_general_ci NOT NULL,
`ppasm` text collate latin1_general_ci NOT NULL,
`phits` int(11) NOT NULL default '0',
`votea` int(11) NOT NULL,
`voteb` int(11) NOT NULL,
`status` text collate latin1_general_ci NOT NULL,
`ptags` text collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2877 ;
از دوستان کسی میتونه واسم ویرایش کنه؟

شما می دونی فیلد bid و usern چیه؟
چرا این کوئری کار نکرد، مشکلش چی بود؟
SELECT blogname,count(postid) AS p FROM posts GROUP BY blogname ORDER BY p

hossin.esm
سه شنبه 07 دی 1389, 23:50 عصر
http://www.geekinterview.com/question_details/25942

ghasemweb
چهارشنبه 08 دی 1389, 00:15 صبح
شما می دونی فیلد bid و usern چیه؟
چرا این کوئری کار نکرد، مشکلش چی بود؟
SELECT blogname,count(postid) AS p FROM posts GROUP BY blogname ORDER BY p

من هم با شما موافقم اين كوئري احتمالا بايد جواب بده. من هم يك جدول ثبت سفارش براي سيستم فروشگاه دارم كه كد كالا و تعدادي فيلد ديگه داره كه من هم مشكلي مشابه دوستمون دارم ، من ميخوام كه تو سايتم 10 كالاي پر فروش رو نمايش بدم و فكر ميكنم كه اين كد جواب كار من رو بده. البته بايد تستش كنم.

yasgig
چهارشنبه 08 دی 1389, 10:32 صبح
شما می دونی فیلد bid و usern چیه؟
ممنون از همه دوستان.bid شماره پست کاربرها هست.مثلا پست 23 و ...فکر کنم بر اساس این بشه کاری کرد.

من ميخوام كه تو سايتم 10 كالاي پر فروش رو نمايش بدم و فكر ميكنم كه اين كد جواب كار من رو بده.
شاید واسه شما کار بده در صورتی که فیلدتون عدد باشه.مشکل اینجاست که فیلد من char هست.

yasgig
چهارشنبه 08 دی 1389, 11:33 صبح
آخرش بعد از کلی مکافات تونستم یه کوئری بگیرم ولی تعداد دستور هام خیلی زیاده.

<?php
$sql1 = "SELECT *, MAX(bid) FROM posts group by bid order by bid desc";
$result1 = mysql_query($sql1) or die(mysql_error());
$R1 = mysql_fetch_array($result1);
$num1 = mysql_num_rows($result1);
$sqla1 = "SELECT * FROM blogs where usern = '$R1[weblog]'";
$resulta1 = mysql_query($sqla1) or die(mysql_error());
$z1 = mysql_fetch_array($resulta1);
//end query 1
$sql2 = "SELECT *, MAX(bid) FROM posts where weblog != '$R1[weblog]' group by bid order by bid desc";
$result2 = mysql_query($sql2) or die(mysql_error());
$R2 = mysql_fetch_array($result2);
$num2 = mysql_num_rows($result2);
$sqla2 = "SELECT * FROM blogs where usern = '$R2[weblog]'";
$resulta2 = mysql_query($sqla2) or die(mysql_error());
$z2 = mysql_fetch_array($resulta2);
//end query 2
$sql3 = "SELECT *, MAX(bid) FROM posts where weblog != '$R1[weblog]' && weblog != '$R2[weblog]' group by bid order by bid desc";
$result3 = mysql_query($sql3) or die(mysql_error());
$R3 = mysql_fetch_array($result3);
$num3 = mysql_num_rows($result3);
$sqla3 = "SELECT * FROM blogs where usern = '$R3[weblog]'";
$resulta3 = mysql_query($sqla3) or die(mysql_error());
$z3 = mysql_fetch_array($resulta3);
//end query 3
$sql4 = "SELECT *, MAX(bid) FROM posts where weblog != '$R1[weblog]' && weblog != '$R2[weblog]' && weblog != '$R3[weblog]' group by bid order by bid desc";
$result4 = mysql_query($sql4) or die(mysql_error());
$R4 = mysql_fetch_array($result4);
$num4 = mysql_num_rows($result4);
$sqla4 = "SELECT * FROM blogs where usern = '$R4[weblog]'";
$resulta4 = mysql_query($sqla4) or die(mysql_error());
$z4 = mysql_fetch_array($resulta4);
//end query 4
$sql5 = "SELECT *, MAX(bid) FROM posts where weblog != '$R1[weblog]' && weblog != '$R2[weblog]' && weblog != '$R3[weblog]' && weblog != '$R4[weblog]' group by bid order by bid desc";
$result5 = mysql_query($sql5) or die(mysql_error());
$R5 = mysql_fetch_array($result5);
$num5 = mysql_num_rows($result5);
$sqla5 = "SELECT * FROM blogs where usern = '$R5[weblog]'";
$resulta5 = mysql_query($sqla5) or die(mysql_error());
$z5 = mysql_fetch_array($resulta5);
//end query 5
echo "<b style=color:green>&raquo;</b>&nbsp;<a href=http://$R1[weblog].yasgig.ir target=_blank>$z1[btitle]</a>(تعداد پست:$num1)<br>";
echo "<b style=color:green>&raquo;</b>&nbsp;<a href=http://$R2[weblog].yasgig.ir target=_blank>$z2[btitle]</a>(تعداد پست:$num2)<br>";
echo "<b style=color:green>&raquo;</b>&nbsp;<a href=http://$R3[weblog].yasgig.ir target=_blank>$z3[btitle]</a>(تعداد پست:$num3)<br>";
echo "<b style=color:green>&raquo;</b>&nbsp;<a href=http://$R4[weblog].yasgig.ir target=_blank>$z4[btitle]</a>(تعداد پست:$num4)<br>";
echo "<b style=color:green>&raquo;</b>&nbsp;<a href=http://$R5[weblog].yasgig.ir target=_blank>$z5[btitle]</a>(تعداد پست:$num5)<br>";
?>
مثلا اینکه دیگه چاره ای نیست و باید از این استفاده کنم.
اینم نمونه
http://yasgig.ir/blog