Avatar billede JJ77 Juniormester
25. januar 2008 - 21:50 Der er 1 kommentar og
1 løsning

Vis mest populære annoncer øverst

Hej Eksperter

Nedenstående kode henter en liste med nogle annoncer. Disse bliver sorteret efter hvor nye de er efter id DESC. 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)? Altså en slags "order by visningerIalt desc limit=5, order rest by id desc limit".


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


NEDENSTÅENDE VISES MIN NUVÆRENDE SQL SOM HENTER ANNONCERNE.


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());
Avatar billede rosvall Nybegynder
29. januar 2008 - 21:22 #1
Prøv med en midlertidig tabel:

CREATE TEMPORARY TABLE tmp (id INT, hits INT);
INSERT INTO tmp SELECT * FROM din_tabel ORDER BY hits DESC LIMIT 5;
INSERT INTO tmp SELECT * FROM din_tabel ORDER BY id;
SELECT * FROM tmp

Du bør nok tilføje din where-klausul i begge de to første select's og bruge den sidste select til at dele op i sider. Hvis det er en stor tabel er det nok en god ide at bruge en mysql_pconnect(), og give den midlertidige tabel et unikt navn, som du gemmer mellem sidevisninger, sådan at du ikke skal lave en ny midlertidig tabel for at vise side 2 osv.
Avatar billede JJ77 Juniormester
07. oktober 2008 - 20:57 #2
lukker spg.
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
Computerworld tilbyder specialiserede kurser i database-management

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