Beethoven Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 Hei. Driver å forbedrer kunnskapen min i PHP ved å lage et forum. Jeg skal hente ut alle fra en kategori. Men jeg henter dem ut, men jeg vil ha den tråden øverste som det ble skrevet siste på. Ikke den nyeste tråden! Hvis noen forstår? Tabellen er sånn: posts id date text user ip topics id title date text user ip Og her er koden: <?php require_once('./inc/top.inc.php'); $catid = intval($_GET['catid']); $query = mysql_query("SELECT * FROM `categories` WHERE id=$catid"); $check = mysql_num_rows($query); $name = mysql_fetch_assoc($query); $title = $name['title']; echo '<h2>'.$title.'</h2>'."\n\n"; if ($check == 0) { echo '<p>Det er ingen tråder i denne kategorien.</p>'; } else { echo '<table class="mainTable">'."\n\n"; echo "\t".'<tr>'."\n\n"; echo "\t\t".'<th>Tittel</th>'."\n"; echo "\t\t".'<th>Svar</th>'."\n"; echo "\t\t".'<th>Siste innlegg</th>'."\n\n"; echo "\t".'</tr>'."\n\n"; $query = mysql_query("SELECT * FROM `topics` WHERE `cat_id`=$catid ORDER BY id DESC"); while ($get = mysql_fetch_assoc($query)) { $farge = (!isset($farge) || $farge != '1') ? '1' : '0'; $id = $get['id']; $title = $get['title']; $user = $get['user']; $count = mysql_fetch_assoc(mysql_query("SELECT COUNT(`id`) AS `count` FROM `posts` WHERE `t_id`=$id")); echo "\t".'<tr>'."\n\n"; echo "\t\t".'<td class="catTitle'.$farge.'" valign="middle"><h3 class="catTitle"><a href="showtopic.php?catid='.$catid.'&topicid='.$id.'">'.$title.'</a></h3><p class="catDescription">Skrevet av <strong>'.$user.'</strong></p></td>'."\n"; echo "\t\t".'<td class="catTopics'.$farge.'" valign="middle" align="center">'.$count['count'].'</td>'."\n"; echo "\t\t".'<td class="catLast'.$farge.'" valign="middle" align="center"><a href="#">Hvem er smartest her?!</a> skrevet av <a href="#">balle</a> den <strong>21.03.05 - 15:35:55</strong></td>'."\n\n"; echo "\n\t".'</tr>'."\n\n"; } echo '</table>'."\n\n"; echo '<p><a href="addtopic.php?catid='.$catid.'">Ny tråd</a></p>'; } require_once('./inc/bottom.inc.php'); ?> Noen som kan hjelpe meg hadde jeg blitt glad ! Lenke til kommentar
aCa Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 Så ikke noe på php koden din men ett lite tips for å få vise de nyeste feltene først er: ORDER BY date DESC Lenke til kommentar
Beethoven Skrevet 11. juli 2005 Forfatter Del Skrevet 11. juli 2005 Selv om nyhetene er lagra etter time() funksjonen? Har hørt at det er vrient.... Lenke til kommentar
Lurifaksen Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 (endret) edit: glem det... Endret 11. juli 2005 av Lurifaksen Lenke til kommentar
Lokaltog Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 (endret) Ikke aner jeg hvordan forumet ditt skal fungere (ser ingen id eller noe som knytter topics mot poster); slik er iallefall grunnstrukturen på forumene jeg lager: * TOPICS id uid (user-id) title subtitle date * POSTS id uid (user-id) tid (topic-id) text date Edit: Spiller ingen rolle om tiden er lagret som INT(10) med time() fra PHP i seg, men jeg vil likevel anbefale på det sterkeste å bruke felter som er beregnet på tidspunkter i MySQL, f.eks. TIMESTAMP eller DATETIME. Da kan du også konvertere til/fra UNIX_TIMESTAMP og mye annet morsomt. Edit 2: Hentet direkte fra kildekoden til unrealized.org v2 (ikke oppe ennå), modifiser og bruk tilsvarende, det skal funke: SELECT *, t.`id` AS `t_id`, MAX(p.`time`) AS `lastpost`, COUNT(t.`id`) AS `tcount` FROM `fthreads` t, `fposts` p WHERE t.`id` = p.`threadid` AND t.`cat` = '$cat' GROUP BY p.`threadid` ORDER BY `lastpost` DESC Blir vel noe sånt: SELECT t.*, MAX(p.`date`) AS `lastpost` FROM `topics` t, `posts` p WHERE t.`id` = p.`tid` GROUP BY p.`tid` ORDER BY `lastpost` DESC Endret 11. juli 2005 av Lokaltog Lenke til kommentar
aCa Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 Så lenge du bruker ett datoformat på feltet date i databasen, f.eks type datetime så skal det fungere fint å bruke order by på den måten. Hvis feltet date ikke er av type datetime eller lignende ville jeg anbefale deg å bytte til det. Du kan forresten f.eks benytte deg av sql kommandoen NOW() på datofelt i databasen hvis du kjører mysql. Lenke til kommentar
Beethoven Skrevet 11. juli 2005 Forfatter Del Skrevet 11. juli 2005 Glemte å forklare koden. Det er koden for å vise fram tråden i en kategori. Som hvis dere går på PHP, dere får opp alle trådene i PHP . Vel, så jeg burde ikke bruker time()? Men hvilken er den beste å anbefale? Og noen som kan vise meg hvordan jeg kan bruke den for å hvise datoen på en forstålig måte? Takk for hjelpen hittil . Lenke til kommentar
aCa Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 Hvis du f.eks benytter deg av type datetime i databasen så kan du bruke dette for å vise det på det formatet du vil ha: SELECT DATE_FORMAT(date, '%d.%m.%Y') FROM tabellnavn ORDER BY date DESC Se mer her: dato funksjoner Lenke til kommentar
Lokaltog Skrevet 11. juli 2005 Del Skrevet 11. juli 2005 (endret) Vel, så jeg burde ikke bruker time()? Men hvilken er den beste å anbefale? Og noen som kan vise meg hvordan jeg kan bruke den for å hvise datoen på en forstålig måte? Du lager et felt i tabellen med typen TIMESTAMP, DATE, TIME, DATETIME etc., avhengig av behov. Jeg bruker oftest DATETIME. Du kan legge inn verdier i tabellen med f.eks. en av disse spørringene: - INSERT INTO `tabell` SET `tid` = NOW() - INSERT INTO `tabell` SET `tid` = FROM_UNIXTIME('. time() .') - INSERT INTO `tabell` SET `tid` = '05.04.13 13:45:23' Og du kan hente ut UNIX-timestamp'et fra tabellen slik: - SELECT *, UNIX_TIMESTAMP(`tid`) AS `tid` Edit: eller med DATE_FORMAT, slik som vist ovenfor. Endret 11. juli 2005 av Lokaltog Lenke til kommentar
Beethoven Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 Ok, har prøvd litt nå. Kjørte denne queryen på postene: $query = mysql_query("SELECT user, text, DATE_FORMAT(date, '%d.%m.%Y') FROM `posts` WHERE t_id=$topicid"); Men det kommer ikke opp noe. Også når jeg får opp noe så er det bare en hel nuller. Prøvde datetime... jeg har satt det opp phpmyadmin. Jeg skriver ikke noe dato i spørringen som kjøres når jeg lagrer et innlegg.... vel noen som kan hjelpe? Lenke til kommentar
Lokaltog Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 Når jeg henter ut verdier vha. f.eks. DATE_FORMAT, pleier jeg å gi verdiene aliaser som kan brukes litt enklere i PHP. Med spørringen SELECT user, text, DATE_FORMAT(date, '%d.%m.%Y') FROM `posts` WHERE t_id=$topicid må du bruke mysql_fetch_array og referere til datoformatet som $array['DATE_FORMAT(date,'%d.%m.%Y')'] - hvis jeg ikke tar helt feil. Prøv å gi datoen et alias slik: SELECT user, text, DATE_FORMAT(date, '%d.%m.%Y') AS `date` FROM `posts` WHERE t_id='$topicid' ... og husk apostrofer rundt $topicid. Lenke til kommentar
Beethoven Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 Nei, tall skal ikke ha apostrofer ol. Leste at de skal være uten jeg... Lenke til kommentar
Beethoven Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 Det funka dessverre ikke... fikk bare: 00.00.0000 Kan det ikke ha noe med hvordan jeg lagrer det? Fordi jeg skriver ikke noe til date...? Skal det skrives av seg selv? Lenke til kommentar
Torbjørn Skrevet 12. juli 2005 Del Skrevet 12. juli 2005 Et par kommentarer fra sidelinja: *) når du ønsker å sette inn datoen i tabellen, bruk Now() som de andre sier, eks: insert into tabelanem set ...., datokolonne=Now(), ..... *) det er uheldig å bruke navnet "date" på en kolonne, da dette er et "reserved keyword" i mysql (kan likevel bruke `date`) men det er uheldig som sagt, og bør unngås. Lenke til kommentar
Beethoven Skrevet 12. juli 2005 Forfatter Del Skrevet 12. juli 2005 Fikk det til nå! Takk skal dere ha . Men... jeg har enda ikke helt fått svaret på spørsmålet mitt som står øverst, eller så er det jeg som er ute å røyker her...? Lenke til kommentar
Torbjørn Skrevet 13. juli 2005 Del Skrevet 13. juli 2005 for å spare serverload, kan du jukse, og legge til en kolonne i topic-tabellen som heter "lastposted datetime", og som du oppdaterer hver gang noen skriver en post Lenke til kommentar
Beethoven Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 Hei, Torbjørn, det var jo genialt! Takk! Lenke til kommentar
Beethoven Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 Ok, det ser ut som det er trøbbel med de dato greiene. Jeg lagrer last_post med NOW() i datetime. Den som det ble sist posta på kommer den, men de under blir ikke riktig. Har ikke det med datoen å gjøre? Hvordan skal jeg fikse på det da? =S Takk for hjelpen hittill! Lenke til kommentar
Torbjørn Skrevet 13. juli 2005 Del Skrevet 13. juli 2005 hvis du oppdaterer kolonnen last_post i topics tabellen for riktig topic hver gang noen poster, så bør det gå på skinner... eks: select * from topics order by last_post desc limit 10 du brukte datetime på last_post ja? Lenke til kommentar
Beethoven Skrevet 13. juli 2005 Forfatter Del Skrevet 13. juli 2005 Sånn her gjør jeg det når jeg lagrer en post: $a = "INSERT INTO `posts` (`user`, `t_id`, `ip`, `text`, `date`) VALUES ('$username', '".$topicid."', '".$ip."', '".$message."', NOW())"; mysql_query($a); $b = "UPDATE topics SET last_date_posted=NOW()"; mysql_query($b); Og når jeg skriver ut alle trådene i en kategori: SELECT * FROM `topics` WHERE `cat_id`=$catid ORDER BY last_date_posted DESC 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å