Avatar billede JJ77 Juniormester
24. januar 2008 - 18:04 Der er 17 kommentarer og
1 løsning

Vis 5 mest populære annoncer øverst

Hej Eksperter

Nedenstående kode viser en liste med nogle annoncer. Disse bliver sorteret efter hvor nye de er. Altså de nyeste vises øverst og så fremdeles. Annoncerne indeholder et felt "visningerIalt" som indeholder et tal på hvor mange gange annoncen er blevet vist.

Nu kommer det svære!!!
Kan man få den til at vise annoncerne som den plejer, MEN nu med de 5 mest populære annoncer øverst (altså de 5 annoncer som har flest visninger)?

Nu kommer det helt sindsygt svære!!!!
Kan man få den til at vise de 5 øverste annoncer med denne baggrundsfarve <TR BGCOLOR=#FFBE8F> ?

<body>
<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
<div align="center">
    <form action="salgsannoncerVentetoej.php" method="GET">
                <div align="left">
                        <table border="0" cellspacing="5" cellpadding="0" height="42">
                        <tr height="37">
                            <td height="37"><span class="lille"><b><font color="#ff6600">Søgeord:</font></b></span><br>
                    <div align="left">
                        <input type="text" name="search" value="<? echo $_REQUEST['search']; ?>" size="20"> </div>
                </td>
                        <td height="37"><span class="lille"><b><font color="#ff6600">Kategori:</font></b></span><br>
<select name="selectKategori" size="1" onchange="this.form.submit()">
    <option value="">Alle kategorier</option>
    <option value="Bukser" <? if($_GET["selectKategori"]=="Bukser") echo "selected"; ?>>Bukser</option>
    <option value="Overdele" <? if($_GET["selectKategori"]=="Overdele") echo "selected"; ?>>Overdele</option>
    ***FJERNE KODE***
</select></td>
                           
                        <td height="37"><span class="lille"><b><font color="#ff6600">Omr&aring;de:</font></b></span><br>
                    <select name="selectName" size="1" onchange="this.form.submit()">
                        <option value="0000-9990">Hele Danmark</option>
                            <option value="0" style='background:#E4E9EC'> </option>

                            <option value="0800-2990" <? if($_GET["selectName"]=="0800-2990") echo "selected"; ?>>Storkøbenhavn</option>
                            <option value="8000-8210" <? if($_GET["selectName"]=="8000-8210") echo "selected"; ?>>Århus</option>
                            ***FJERNE KODE***
                           
                    </select>&nbsp;<input type="submit" name="knap" value="Søg"></td>
            </tr>
                    </table>
                </div>
                <input type="hidden" name="gruppe" value="Ventetøj" readonly size="5">
            </form>
        </div>

<table width="560" border="0" cellspacing="0" cellpadding="0"bgcolor="#658091">
            <tr>
                <td><span class="mini">&nbsp;</span></td>
            </tr>
        </table>
<table width="560" border="0" cellspacing="5" cellpadding="0" bgcolor="#FFFFFF">
<tr>
        <td width="390" valign="top"><span class="mellem1">Annonce</span></td>
        <td width="60" align="center" valign="top">
                <div align="center">
                    <span class="mellem1">Pris</span></div>
            </td>
        <td width="110" align="center" valign="top">
                <div align="center">
                    <span class="mellem1">Omr&aring;de</span></div>
            </td>
</tr>
</table>
<table width="560" border="0" cellspacing="0" cellpadding="0"bgcolor="#658091">
            <tr>
                <td><span class="mini">&nbsp;</span></td>
            </tr>
        </table>


<?PHP
require("../members/common.php");

***FJERNE KODE PAGING***

echo "</tr></td></table>";
  echo "  <table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#CAD9EA\">
            <tr>
                    <td><span class=\"mini\">&nbsp;</span></td>
                </tr>
        </table>";

if (!isset($_GET['selectName']) || trim($_GET['selectName']) == "")
{
$sql = "SELECT * FROM salgAfProdukt LEFT JOIN postnr ON salgAfProdukt.postNr = postnr.postnr WHERE gruppe LIKE 'Ventetøj' AND (produkt LIKE '%".htmlentities($_GET['search'])."%' OR supplerendeTekst LIKE '%".htmlentities($_GET['search'])."%') ORDER BY id DESC LIMIT $s, $pr_side";
}
else
{
      $sql = "SELECT * FROM salgAfProdukt LEFT JOIN postnr ON salgAfProdukt.postNr = postnr.postnr WHERE
    gruppe LIKE 'Ventetøj' AND (produkt LIKE '%".htmlentities($_GET['search'])."%' OR supplerendeTekst LIKE '%".htmlentities($_GET['search'])."%')
    AND salgAfProdukt.postNr BETWEEN LEFT('".$_GET['selectName']."', 4) AND RIGHT('".$_GET['selectName']."', 4)
    AND kategori LIKE '%".$_GET['selectKategori']."%' ORDER BY id DESC LIMIT $s, $pr_side";
}

$query = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_array($query))
{
    $sql2 = "SELECT id,count(*) AS antalBilleder FROM billeder_salgAfProdukt WHERE artikelid=".$row["Id"]." GROUP BY artikelid";
    $query2 = mysql_query($sql2) or die(mysq_error());
    $row2 = mysql_fetch_assoc($query2);
   
echo "

    <table width='560' border='0' cellspacing='0' cellpadding='5' bgcolor='#FFFFFF'>
    <TR BGCOLOR=#FFFFFF onMouseover=\"this.bgColor='#ebe9e9'\" onMouseout=\"this.bgColor='#FFFFFF'\">
    <td width='370' valign='top'><span class='mellem'><a href='visSalgsannoncer.php?id=$row[Id]' target='vs'>$row[produkt]</a></span> <br><span class='lille'>".klip($row['supplerendeTekst'])."</span></td>

";
   
echo"<td width='25'>";

if ($row2["antalBilleder"] > 0)
{
    //echo "<img src='../NewFiles/kamera.gif' height=\"21\" width=\"23\">";
    echo '<a href="java script:void(0);" onmouseover="return overlib(\'<img width=170 src=imageSalgsannoncer.php?id='.$row2['id'].'>\', ABOVE, MOUSEOFF, WIDTH, 70, HEIGHT, 70);" onmouseout="return nd();"><img src="../NewFiles/kamera.gif" height="21" width="23" border="0"></a>';
}
   
echo "</td>";
echo "
   
    <td width='70' align='center' valign='top'><span class='lilleS'>" . $row['pris'] . " Kr.</span></td>
    <td width='95' align='center' valign='top'><span class='lilleS'>" . $row['bynavn'] . "</span></td></tr></table>

    <table width='560' border='0' cellspacing='0' cellpadding='0'bgcolor='#CAD9EA'>
    <tr>
    <td><span class='mini'>&nbsp;</span></td>
    </tr>
    </table>
";
}

echo "<table border='0' cellspacing='5' cellpadding='0'><tr><td>";

***FJERNE KODE PAGING***

}

echo "</tr></td></table><br><br>";
?>
</body>
Avatar billede jakobdo Ekspert
24. januar 2008 - 20:09 #1
Hvilken af dine sql'er indeholder din annoncer?
I teorien burde det blot være: ORDER BY visningerIAlt DESC
Avatar billede JJ77 Juniormester
24. januar 2008 - 20:19 #2
Det er sku dem begge.. Men de bruges vist begge to da der også er en søgefunktion på siden.. Kan man bruge order by to gange efter hinanden så det bliver???

ORDER BY visningerIalt ORDER BY id DESC LIMIT $s, $pr_side";

Så førstekriteriet er på visningerIalt og andenkriteriet er på id.


if (!isset($_GET['selectName']) || trim($_GET['selectName']) == "")
{
$sql = "SELECT * FROM salgAfProdukt LEFT JOIN postnr ON salgAfProdukt.postNr = postnr.postnr WHERE gruppe LIKE 'Ventetøj' AND (produkt LIKE '%".htmlentities($_GET['search'])."%' OR supplerendeTekst LIKE '%".htmlentities($_GET['search'])."%') ORDER BY id DESC LIMIT $s, $pr_side";
}
else
{
      $sql = "SELECT * FROM salgAfProdukt LEFT JOIN postnr ON salgAfProdukt.postNr = postnr.postnr WHERE
    gruppe LIKE 'Ventetøj' AND (produkt LIKE '%".htmlentities($_GET['search'])."%' OR supplerendeTekst LIKE '%".htmlentities($_GET['search'])."%')
    AND salgAfProdukt.postNr BETWEEN LEFT('".$_GET['selectName']."', 4) AND RIGHT('".$_GET['selectName']."', 4)
    AND kategori LIKE '%".$_GET['selectKategori']."%' ORDER BY id DESC LIMIT $s, $pr_side";
}
Avatar billede jakobdo Ekspert
24. januar 2008 - 20:35 #3
Du kan lave: ORDER BY visningerIAlt DESC, id DESC, mere ASC, noget ASC osv...

Og prioritet er fra venstre mod højre.
Avatar billede JJ77 Juniormester
24. januar 2008 - 20:35 #4
Men det er helt sikkert en der trækker tænder ud.. og store af slagsen ;-)
Avatar billede JJ77 Juniormester
24. januar 2008 - 20:37 #5
For hvordan får man den til altid at vise de 5 annoncer som har flest visninger først... og herefter vise alle andre sorteret efter id????
Avatar billede JJ77 Juniormester
24. januar 2008 - 20:39 #6
Vel noget i den stil, selv om det sikkert er helt hen i vejret;

order by visningerIalt desc limit=5, id desc limit $s, $pr_side";
Avatar billede jakobdo Ekspert
24. januar 2008 - 21:11 #7
LIMIT 0,5 vil give dig de 5 med flest visninger.
Men du vil lave en SQL som viser de 5 med flest hits ikke?
Avatar billede JJ77 Juniormester
24. januar 2008 - 21:27 #8
Den skal hente alle annoncer i databasen. Måden de skal sorteres er således.
De første 5 annoncer som præsenteres er de annoncer som har flest visningerIalt DESC. Herefter kommer alle de andre annoncer ordnet som de plejer, altså via id DESC.
Avatar billede JJ77 Juniormester
24. januar 2008 - 21:34 #9
Her er en præcis beskrivelse af hvordan den skal hente annoncerne ud.. Annoncerne skal vises sammen. De første 5 er bare altid dem med flest hits.


FØRSTE 5 ER ORDER BY HITS
RESTEN ER ORDER BY ID

Annonce id=11 hits=25
Annonce id=12 hits=20
Annonce id=13 hits=15
Annonce id=14 hits=10
Annonce id=15 hits=5  (HER ER SKIFTET)
Annonce id=19 hits=2
Annonce id=18 hits=3
Annonce id=17 hits=1
Annonce id=16 hits=4
Avatar billede jakobdo Ekspert
24. januar 2008 - 21:36 #10
Jeg tror du bliver nødt til at lave det via 2 sql'er!
En som trækker de 5 med flest hits ud.
Gem de 5 id'er!
Og træk så alle ud igen og brug en: WHERE id NOT IN (1,2,3,4,5)
Så får du ikke de samme annoncer igen.
Avatar billede JJ77 Juniormester
24. januar 2008 - 21:38 #11
Kunne ellers være cool hvis man kunne noget lignende;

order by visningerIalt desc limit=5, id desc limit";
Avatar billede jakobdo Ekspert
24. januar 2008 - 21:48 #12
Det kan du desværre ikke! :o)
Avatar billede JJ77 Juniormester
24. januar 2008 - 22:13 #13
AHHH.. en eller anden psyko må sq da kunne stykke en sql sammen som virker... Efter min mening er denne her altså tæt på ;-)

order by visningerIalt desc limit 5, id desc limit";
Avatar billede jakobdo Ekspert
25. januar 2008 - 07:53 #14
Ja efter din mening! :o)
Men er den også efter mysql's mening?
Avatar billede JJ77 Juniormester
25. januar 2008 - 09:58 #15
OK, så. Må hellere give mig :-)

Men hvis man skal gøre det med endnu flere sqller end der er nu, bliver det bare så uorverskueligt. Kan overhovedet ikke finde ud af hvordan det skal se ud så?
Specielt ikke da topannoncerne kun skal vises på første side. Når man går til næste side i pagingen skal de 5 topannoncer ikke vises øverst mere. Dog kun hvis man går til første siden igen.
Avatar billede jakobdo Ekspert
25. januar 2008 - 18:14 #16
Nej, der er lidt udfordringer! :o)
Avatar billede JJ77 Juniormester
25. januar 2008 - 21:43 #17
Nå.. men lukker den lige og prøver i databasekategorien..
Avatar billede jakobdo Ekspert
26. januar 2008 - 19:03 #18
Selv tak for hjælpen, det var så lidt.
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