Класация в php

lglgl

Active Member
Моля сериозно,ако няма да помагате, не пишете.
Здравейте! Имам нужда от малко помощ, сам не мога да се справя.
Имам пхп код за Топ снимки, което се избират от MyphpAdmin(в таблицата photos във структура Cool обозначавам от NO на Yes)
Искам от същи пхп код да направя рейтинг страница да се показва кой има най-много гласове.
ето кода.
Код:
<?php

$thispage = $PHP_SELF;



$showeachside = 5; //  Колко страници да се показват отляво и отдясно на текущата страница



// Колко реда на страница

$rowsPerPage = 12;



// Подразбираме показване на първа страница

$pageNum = 1;



// ако $_GET['page'] е дифинирано използваме тази страница

if(isset($_GET['page']))

{

    $pageNum = htmlspecialchars($_GET['page']);

}

if(!preg_match("/^(?i)[0-9_]*$/", $_GET['page'])) { $pageNum = '1'; }

if($_GET['page'] == NULL) { $pageNum = '1'; }

// пресмятаме отместването

$offset = ($pageNum - 1) * $rowsPerPage;



// тук трябва да напишеш своята заявка

    $result = mysql_query("SELECT * FROM photos WHERE active='yes' and cool='no' ORDER BY id DESC LIMIT  $offset, $rowsPerPage");

if(mysql_num_rows($result)>0)

{

while($rr = mysql_fetch_assoc($result))

{ ?>

<div class="hotPicture">

<a href="user.php?p=photo&id=<? echo $rr['id']; ?>"><img src="<? echo 'resize.php?img='.$rr['pic_big'].'&w=700&h=700'; ?>" width="205" height="205" class="<? if($row['pol'] == "boy") { echo 'm_sex'; } else { echo 'f_sex'; } ?>"></a> </div> 

<? $ss = mysql_query("SELECT * FROM users WHERE username = '".$rr['user']."' LIMIT 1");if(mysql_num_rows($ss)>0) {while($r = mysql_fetch_array($ss)){if($r['osnovna'] == NULL) { $photobg = 'images/noimage.jpg'; } else { $photobg = $r['osnovna']; }?>




<?} }

}

}

else

{

echo 'Няма качени снимки';

}



// колко реда общо имаме ?

$query1   = "SELECT COUNT(id) AS numrows FROM photos WHERE cool='no'";

$result  = mysql_query($query1) or die('Error, query failed');

$row     = mysql_fetch_array($result, MYSQL_ASSOC);



$num = $row['numrows']; // броя на редовете



$start = ($pageNum -1) * $rowsPerPage;

if(empty($start))$start=0;  // текуща стартова позиция



$max_pages = ceil($num/$rowsPerPage); // брой на страниците

$cur = ceil($start/$rowsPerPage)+1; // текуща страница

?>


            <?php

            if(($start-$rowsPerPage) >= 0)

            {

                $next = $cur - 1;

                ?>
		
                <a class="page" href="<?php print("$thispage?page=1");?>">Първа</a>

                <a class="page" href="<?php print("$thispage".($next>0?("?page=").$next:""));?>">Назад</a>

                <?php

            }

            ?>


                        <?php

                        $eitherside = ($showeachside * $rowsPerPage);

                        if($start+1 > $eitherside)print (" .... ");

                        $pg=1;

                        for($y=0;$y<$num;$y+=$rowsPerPage)

                        {

                            $class=(($y==$start)?"active":"")."page";

                            if(($y > ($start - $eitherside)) && ($y < ($start + $eitherside)))

                            {

                                if ($y <> $start) {

                                    ?>

                                    &nbsp;<a class="<?php print($class);?>" href="<?php print("$thispage"."?page=".(($y/$rowsPerPage)+1));?>"><?php print($pg);?></a>&nbsp;

                                    <?php

                                } else {

                                    ?>

                                    &nbsp;<a class="<?php print($class);?>"><?php print($pg);?></a>&nbsp;

                                    <?php

                                }

                            }

                            $pg++;

                        }

                        if(($start+$eitherside)<$num)print (" .... ");

                        ?>


            <?php

            if (($start+$rowsPerPage) < $num)

            {

                $next = $cur + 1;

                ?>

                <a class="page" href="<?php print("$thispage?page=".$next);?>">Напред</a>

                <a class="page" href="<?php print("$thispage?page=$max_pages");?>">Последна</a>

                <?php

            }

            ?>
Както видждаате данните идват от photos таблица, където снимка трябва да е COOL - YES
как да направя че от база данни да показва профили с най много гласове?
ето и таблциа за гласове
Votes
Структура
Id, user1(от кого) user2(към кого) wht(в този случай имам само положителен глас - plus)
ако,някой иска да ми помогне, ще му пратя файл.
 

imagination

Active Member
От: Класация в php

Здравей,
Не ми стана ясно само каква е връзката на топ снимките с потребителите, но да кажем, че на тебе ти е ясно.
Ще ти напиша примерна SQL заявка, предполагам ще можеш да си я донаправиш.
Приемам, че таблицата с потребителите ти се казва 'Users' и нейният главен ключ е Id.
Код:
SELECT *, (SELECT COUNT(*) FROM Votes WHERE user2 = Users.Id) as c FROM Users  ORDER BY c DESC LIMIT 100
Ако трябва да се извадят само потребителите, за които вече е гласувано
Код:
SELECT *, (SELECT COUNT(*) FROM Votes WHERE user2 = Users.Id) as c FROM Users  HAVING c > 0 ORDER BY c DESC LIMIT 100
пп. заявките са примерни предолагам може и да не тръгнат от първият път.
Поздрави.
 

Горе