uranus Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 Hei! Jeg har en kode hvor jeg ønsker å ignorere nyeste resultatet. Dvs. nyeste "nyheten" i databasen. Slikt at koden viser nest nyeste nyheten og alle bakover men ikke den nyeste. Dette grunnet jeg har en slags "se på meg" div rund den nyeste hvor dem fremheves. Akkurat nå er det løst slikt: $query = " SELECT * FROM nyhet " . " WHERE NOT nyhet_kategori = '3' ORDER BY nyhet_id desc LIMIT $offset, $rowsPerPage"; $result = mysql_query($query) or die('Error, query failed'); Da er nyheten som fremheves lagt i en egen kategori. Men dette er for tungvindt nå som vi publiserer nyheter daglig. Håper noen kan hjelpe meg her Lenke til kommentar
Jonas Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 (endret) Du vil hente ut fra databasen på bakgrunn av hvordan det skal vises? Vanvittig galt! Uansett, følgende spørring vil hente ut alt med unntak av raden med høyest ID. SELECT * FROM nyhet ORDER BY nyhet_id DESC OFFSET 1 Edit: For å spesifisere litt; du kan bruke CSS til å fremheve første nyhet. Endret 24. januar 2010 av Jonas Lenke til kommentar
uranus Skrevet 24. januar 2010 Forfatter Del Skrevet 24. januar 2010 (endret) Takk for svar, skal teste det. Men hvordan ville du personlig gjort det da? -- Edit: $query = " SELECT * FROM nyhet " . " ORDER BY nyhet_id DESC OFFSET 1 desc LIMIT $offset, $rowsPerPage"; $result = mysql_query($query) or die('Error, query failed'); Query Failed Endret 24. januar 2010 av uranus Lenke til kommentar
Jonas Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 (endret) Men hvordan ville du personlig gjort det da? Jeg ville, som sagt, brukt CSS. Ta en titt på :first-child. Satt sammen et simpelt eksempel. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>News n stuff y0</title> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> <style type="text/css"> * { margin: 0; padding: 0; } #content { width: 400px; } #content .news { float: left; width: 200px; margin-top: 10px; } #content .news:first-child { width: 400px; } </style> </head> <body> <div id="content"> <div class="news"> <h1>Lorem Ipsum</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> </div> <div class="news"> <h1>Phasellus</h1> <p>Nulla nec tortor quis elit facilisis tincidunt. Proin sed velit lorem, quis pulvinar massa.</p> </div> <div class="news"> <h1>Duis gravida</h1> <p>Suspendisse mollis ante ac diam sodales in molestie quam euismod.</p> </div> <div class="news"> <h1>Cum sociis</h1> <p>Donec velit nisi, dapibus sit amet hendrerit pretium, dictum vel enim.</p> </div> <div class="news"> <h1>Nunc eu</h1> <p>Morbi arcu metus, sollicitudin et eleifend et, malesuada quis sem.</p> </div> </div> </body> </html> Hvis du finner det umulig å bruke :first-child, noe som kan være tilfelle, så er det ikke værre enn å printe ut første nyhet med en spesiell class e.l. $query = " SELECT * FROM nyhet " ." ORDER BY nyhet_id DESC OFFSET 1 desc LIMIT $offset, $rowsPerPage"; $result = mysql_query($query) or die('Error, query failed'); Spørringen feiler fordi OFFSET er definert to ganger. Dette er vel ikke tilfeldigvis en del av et pagination-script? Endret 24. januar 2010 av Jonas Lenke til kommentar
uranus Skrevet 24. januar 2010 Forfatter Del Skrevet 24. januar 2010 Jo det er det faktisk. Hmm, hva kan man gjøre med det montro? Lenke til kommentar
Jonas Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 (endret) Føler jeg gjentar meg litt nå - men bruk CSS! Slutt å tenke på at første nyhet skal vises annerledes, bare print de ut. Evt. gi den første en unik id/klasse. Dersom du absolutt vil hente ut første nyheten på den siden og resten hver for seg, så er det ikke verre enn å plusse på offset med én. $query = 'SELECT * FROM nyhet ' . 'ORDER BY nyhet_id DESC LIMIT ' . ( $offset + 1 ) . ', ' . ( $rowsPerPage - 1 ); $result = mysql_query($query) or die('Error, query failed'); Endret 24. januar 2010 av Jonas Lenke til kommentar
uranus Skrevet 24. januar 2010 Forfatter Del Skrevet 24. januar 2010 Vel jeg bruker jo CSS, men jeg har divs osv. som må avsluttes mellom nyhet #1 og nyhet #2. Jeg har ikke så veldig god peiling på dette, er mitt første prosjekt på dette nivået. Lenke til kommentar
Jonas Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 (endret) Ok, vel - det offset nettopp gjør er å ignorere rader frem til det tallet. Du har allerede implementert OFFSET i koden din som en del av pagination, så ved å legge til én til OFFSET og trekke fra row count med én, så har du effektivt ignorert den første raden du i utgangspunktet skulle få ut. Alternativt så kan du hoppe over den første nyheten i det du printer de ut, hvorav måten er litt avhengig av hvordan du printer de ut. <?php $query = 'SELECT * FROM nyhet ' . 'ORDER BY nyhet_id DESC LIMIT ' . $offset . ', ' . $rowsPerPage; $result = mysql_query($query) or die('Error, query failed'); // Ved å kalle mysql_fetch_array før while-løkken, så vil du hoppe over første resultat mysql_fetch_array ( $result ); while ( $nyhet = mysql_fetch_array ( $result ) ) print_r ( $nyhet ); ?> <?php $query = 'SELECT * FROM nyhet ' . 'ORDER BY nyhet_id DESC LIMIT ' . ( $offset + 1 ) . ', ' . ( $rowsPerPage - 1 ); $result = mysql_query($query) or die('Error, query failed'); // Her har man hoppet over første resultat via SQL while ( $nyhet = mysql_fetch_array ( $result ) ) print_r ( $nyhet ); ?> Endret 24. januar 2010 av Jonas Lenke til kommentar
TheClown Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 I where-loopen som echoer innholdet har du en $i som økes en per gang loopen går. Definer denne før loopen starter. Inne i while-loopen kjører du en if-statement som spørr om $i == 0, hvis den er det betyr det at loopen henter frem den første nyheten. $i = 0; while .... { if ($i == 0) { echo "første nyhets-design her!"; } else { echo "vanelige nyheter her =)"; } $i++; } Lenke til kommentar
Alex Moran Skrevet 24. januar 2010 Del Skrevet 24. januar 2010 Hadde du hatt en decent array-like struktur som inneholder radene kunne du enkelt gjort dette i templatene dine (pdo / PDOStatement->fetchAll evt lage en array av radene i while-løkka): <?php // i controller $entriesCollection = Entry::findAll(); // i template $firstEntry = array_shift($entriesCollection); // special template for $firstEntry foreach ($entriesCollection as $entry) { // normal template } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå