Avatar billede snoezel Nybegynder
20. februar 2003 - 17:08 Der er 19 kommentarer og
1 løsning

5 første poster

Hejsa, er der en der ved hvordan jeg får følgende Topliste side til at nøjes med at skrive de 5 poster ud fra databasen, som har fået flest hits ?  Samtidig skal den url der bliver skrevet, være på maks 15 tegn.

********kode*********
<?
include "config_5sidste.php";
include "header.php";

if (!$cid) {$cid = 0;}
if (!$from) {$from = 0;}

if ($cid == 0) {
    $squery = mysql_query ("select *,if (rank/votes, rank/votes,0) as ranks,if (stars, stars,0) as star from top_user where status='Y' AND thin>=$min_hits order by thin DESC,ranks DESC,star DESC") or die (mysql_error());
    $tquery = mysql_db_query ($dbname,"select count(sid) as total from top_user where status='Y'",$db) or die (mysql_error());
}
else {
    $squery = mysql_db_query ($dbname,"select *,if (rank/votes, rank/votes,0) as ranks,if (stars, stars,0) as star from top_user where status='Y' AND thin>=$min_hits and category=$cid order by thin DESC,ranks DESC,star DESC,",$db) or die (mysql_error());
    $tquery = mysql_db_query ($dbname,"select count(sid) as total from top_user where status='Y' and category=$cid",$db) or die (mysql_error());
}

?>

<SCRIPT language=JavaScript><!--
    function changecat(newcat) {
        exit=false;
        site = "index.php?cid="+(newcat);
        if (newcat!=0) {
        top.location.href=site;
        } else {
        top.location.href="index.php";
        }
    }
    -->
</SCRIPT>
<body bgcolor="#000000">

<BR>

<table bgcolor="black" align="center" width="150" border="0" cellspacing=1 cellpadding=3>
<?

if (!$from) $cc=1;
else $cc = $from+1;

while ($rows = mysql_fetch_array($squery)) {
    $jscript_imgs[$img_num] = $rows[banner];   
    if ($rows[ranks] > 0) {
        $rating = $rows[ranks];
    }
    else { $rating = 0;}
    ?>
    <tr>
        <td align="center" bgcolor="white">
            <font color="<? echo $font_color;?>" face="<? echo $font_face;?>" size="<? echo $font_size-1;?>"><? echo $cc;?></font>
        </td>
        <td bgcolor="white">
            <center><a href="out.php?<? echo "site=".$rows[sid];?>" target="_blank" onmouseover="window.status='<? echo $rows[url]?>'; return true;" onmouseout="window.status=''; return true;">
           
            </A></center>
            <font color="<? echo $font_color;?>" face="<? echo $font_face;?>" size="<? echo $font_size-1;?>">       
            <a href="out.php?<? echo "site=".$rows[sid];?>" target="_blank" onmouseover="window.status='<? echo $rows[url]?>'; return true;" onmouseout="window.status=''; return true;"><? echo $rows[title];?></A>
           
            <BR>       
                </font></td></tr>
    <?
$cc++;
}

$query = mysql_db_query ($dbname,"select count(sid) as stotal from top_user where status='Y'",$db) or die (mysql_error());
$rows = mysql_fetch_array($query);
$stotal = $rows[stotal];
?>
</table>
Avatar billede c971572 Nybegynder
20. februar 2003 - 17:09 #1
du kan bruge select top 5 from til at få de 5 første poster...
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:10 #2
der er sikkert andre overflødige ting på siden, jeg har fjernet det meste fra original filen, da jeg kun skal bruge URL udtræk til en Top 5 preview side  :-)
Avatar billede c971572 Nybegynder
20. februar 2003 - 17:13 #3
du skal måske også have en "order by" ind et eller andet sted...
Jeg kan nok give dig SQL'en, men på php'en står jeg af
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:19 #4
Som det er nu, trækker den de korrekte poster ud, altså rækkefølgen, den skal bare kun trække de 5 ud med flest hits ind på listen.

Den url den skriver, er nu på for mange tegn, den skal trække 15 ud og er statte resten med ... er det forståeligt formuleret ? :-))
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:21 #5
f.eks: <a href>Klik her for at tilmelde dig bla bla </a>
bliver til
<A href>Klik her for at...</a>
Avatar billede c971572 Nybegynder
20. februar 2003 - 17:22 #6
select top 5 *,if (rank/votes, rank/votes,0) as ranks,if (stars, stars,0) as star from top_user where status='Y' AND thin>=$min_hits and category=$cid order by thin DESC,ranks DESC,star DESC

Ved ikke lige om det er den rigtige sql, og så går jeg ud fra der er en PHP-funktion til at klippe tekst ud af en streng, men jeg må indrømme jeg ikke kender til PHP
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:24 #7
$squery = mysql_db_query ($dbname,"select top 5 *,if (rank/votes, rank/votes,0) as ranks,if (stars, stars,0) as star from top_user where status='Y' AND thin>=$min_hits and category=$cid order by thin DESC,ranks DESC,star DESC,",$db) or die (mysql_error());

den giver fejlen:
You have an error in your SQL syntax near '5 *,if (rank/votes, rank/votes,0) as ranks,if (stars, stars,0) as star from top_' at line 1
Avatar billede c971572 Nybegynder
20. februar 2003 - 17:24 #8
Du kan evt. bruge javascript til det...

String str = "min lange tekststreng";
String str2 = str.substring(0,10);

eller sådan noget lignende
Avatar billede c971572 Nybegynder
20. februar 2003 - 17:26 #9
sorry, jeg ser lige at * efter 5-tallet skal væk
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:33 #10
den giver fejl alligevel, nu uden *:

You have an error in your SQL syntax near '5 ,if (rank/votes, rank/votes,0) as ranks,if (stars, stars,0) as star from top_u' at line 1
Avatar billede c971572 Nybegynder
20. februar 2003 - 17:38 #11
hmm, det var ellers mit bedste bud...

Vender tilbage hvis jeg kommer i tanke om noget andet
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:38 #12
takker alligevel for hjælpen
Avatar billede snoezel Nybegynder
20. februar 2003 - 17:57 #13
andre der har et bud ?
Avatar billede sukos Juniormester
20. februar 2003 - 18:16 #14
For at vise antal tegn i en streng, kan du bruge substr()

<?php
$streng = "Hvor mange tegn er der her?";
echo strlen($streng); //antal tegn
echo"<p>";
echo substr($streng, 0, 5); //Vis de fem første
?>
Avatar billede Slettet bruger
20. februar 2003 - 22:46 #15
ja du skal da bare bruge LIMIT 0,5 i din sql streng så tager den 5
Avatar billede snoezel Nybegynder
20. februar 2003 - 22:50 #16
westhi>> Jeg skal kun bruge de 5 poster fra databasen, dem der har haft flest hits ind - kunne du prøve at sætte dit forslag ind i sql sætningen, tak :)
Avatar billede schaefner Juniormester
20. februar 2003 - 22:52 #17
$query = mysql_query("SELECT * FROM tabel ORDER BY hits DESC LIMIT 0,5");
Skal selvfølgelig rettes til, men burde virke.
Avatar billede snoezel Nybegynder
24. juni 2003 - 18:19 #18
schaefner>> smider du et svar, så vi kan lukke - det virker nu med dit forslag :)
Avatar billede schaefner Juniormester
24. juni 2003 - 18:59 #19
ok
Avatar billede snoezel Nybegynder
24. juni 2003 - 19:00 #20
Tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester