Avatar billede svs Nybegynder
22. september 2001 - 13:01 Der er 9 kommentarer og
1 løsning

Find nyeste indlæg

Jeg bruger phpBB som forum på min hjemmeside. Nu kunne jeg godt tænker mig at få vist det nyeste indlæg på forsiden af mit site. Da alle indlæggene bliver gemt i en mysql base burde det vel være muligt.

Når der oprettes et indlæg får det i tabellen \"posts\" et unikt id og en tids kode \"2001-09-18 14:33\". i tabellen \"poststxt\" ligger selv indlægget under det id der blev tildelt i \"posts\"

Hvordan skriver jeg den forspørgsel der henter det nyeste indlæg, og den tilhørende tekst?


 
Avatar billede limemedia Nybegynder
22. september 2001 - 13:04 #1
SELECT p.*, t.* FROM posts p, poststxt t WHERE p.id=t.id ORDER BY id DESC

id skiftes ud med navnet på dit autoincrement felt
Avatar billede svs Nybegynder
22. september 2001 - 13:20 #2
Jeg har nu lavet dem som følger:

$resultat = mysql_query(\"SELECT p.*, t.* FROM posts p, posts_text t WHERE p.post_id=t.post_id ORDER BY post_id DESC \") or die(mysql_error());

Men det giver følgende meddelse:\"Column: \'post_id\' in order clause is ambiguous
\"
Avatar billede limemedia Nybegynder
22. september 2001 - 13:23 #3
Prøv ...
$resultat = mysql_query(\"SELECT p.*, t.* FROM posts p, posts_text t WHERE p.post_id=t.post_id ORDER BY p.post_id DESC \") or die(mysql_error());

Vi havde ikke fortalt mySQL hvilken af de to post_id\'er (der er end) den skulle sortere efter
Avatar billede smms Nybegynder
22. september 2001 - 13:25 #4
Avatar billede svs Nybegynder
22. september 2001 - 13:46 #5
>Ljweb

Det giver outputtet:
Resource id #2

Hvad sker der ?

Avatar billede limemedia Nybegynder
22. september 2001 - 13:51 #6
$resultat = mysql_query(\"SELECT p.*, t.* FROM posts p, posts_text t WHERE p.post_id=t.post_id ORDER BY p.post_id DESC \") or die(mysql_error());

indeholder samtlige poster sorteret med nyeste først og så resten derefter som perler på en snor...

Vil du kun have den første skal du anvende en limit 0,1 på din sql

Eksemplet illustreret
<?php
  $sql = mysql_query(\"SELECT p.*, t.* FROM posts p, posts_text t WHERE p.post_id=t.post_id ORDER BY p.post_id DESC LIMIT 0,1\") or die(mysql_error());
  if ($sql && mysql_num_rows($sql)) {
    $foo = mysql_fetch_array($sql);
   
    # Debug : send info til skærm
    echo \"<PRE>\";
    print_r($foo);
    echo \"</PRE>\";
  }
?>

$foo vil nu indeholde et associativt array med alle informationerne fra querien !
Avatar billede svs Nybegynder
22. september 2001 - 14:03 #7
Det begynder at ligne noget, men hvad skal jeg skrive hvis jeg bare vil have teksten (post_text) vist?
Avatar billede limemedia Nybegynder
22. september 2001 - 14:38 #8
echo $foo[\"post_text\"];
Avatar billede svs Nybegynder
22. september 2001 - 14:42 #9
Takker
Avatar billede limemedia Nybegynder
22. september 2001 - 14:43 #10
no prob :)
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