Avatar billede jolly_jay Nybegynder
15. marts 2004 - 08:57 Der er 11 kommentarer og
1 løsning

Hjælp til forum - samme topic vises flere gange

Hej,

Jeg har kastet mig ud i at lave et forum.
Jeg har fået det til at virker stortset, men jeg har et lille, eller retter stor problem med visning af topics, den viser i oversigten det samme topic, det antal gange der et svar/post i det, så hvis et topic har 2 posts så vises topic 2 gange.

her er koden:

<?
$fetch_topic = mysql_query("SELECT * FROM jboard_topic as jbt, jboard_posts as jbp, jboard_users as jbu WHERE jbu.uid = jbt.uid AND jbp.fid = jbt.fid AND jbt.fid = '$forum_fid' ORDER BY jbp.pid") or die(mysql_error());
while($forum_topic = mysql_fetch_array($fetch_topic))
{
    $fetch_posts = mysql_query("SELECT * FROM jboard_posts WHERE tid = '$forum_topic[tid]'") or die(mysql_error());
    $forum_posts = mysql_num_rows($fetch_posts);

    $fetch_lastpost = mysql_query("SELECT * FROM jboard_posts AS jbp, jboard_users AS jbu WHERE jbu.uid = jbp.uid AND jbp.tid = '$forum_topic[tid]' ORDER BY pid DESC LIMIT 1") or die(mysql_error());
    $forum_lastpost = mysql_fetch_array($fetch_lastpost);
?>
<tr>
    <td class="jboard_forum_topic" align="center" width="30" height="30"></td>
    <td class="jboard_forum_topic" align="left" height="30"><a href="topic.php?fid=<? echo $forum_topic[fid]; ?>&tid=<? echo $forum_topic[tid]; ?>"><b><? echo $forum_topic[topic]; ?></b></a></td>
    <td class="jboard_forum_topic" align="center" width="100" height="30"><a href="user.php?uid=<? echo $forum_topic[uid]; ?>"><b><? echo $forum_topic[username]; ?></b></td>
    <td class="jboard_forum_topic" align="center" width="50" height="30"><? echo $forum_posts; ?></td>
    <td class="jboard_forum_topic" align="center" width="50" height="30"></td>
    <td class="jboard_forum_topic" align="center" width="150" height="30"><a href="user.php?uid=<? echo $forum_lastpost[uid]; ?>"><b><? echo $forum_lastpost[username]; ?></b></a><br /><? echo $forum_lastpost[date]; ?></td>
    <td class="jboard_forum_topic" align="center" width="30" height="30"></td>
</tr>
<?
}
?>

jeg ar sat den til at sotere efter posts (pid), da de nyeste altid skal vises øverst.

Er der nogen der kan se hvorfor det ikke virker?

evt.kig her: www.jollynet.dk/forum/forum.php?fid=1
Avatar billede avminarm Juniormester
15. marts 2004 - 09:59 #1
kan vi se et dump af din DB
Avatar billede jolly_jay Nybegynder
15. marts 2004 - 10:28 #2
ok

#
# Struktur dump for tabellen `jboard_forum`
#

CREATE TABLE jboard_forum (
  fid int(11) NOT NULL auto_increment,
  gid int(11) NOT NULL default '0',
  title text NOT NULL,
  comment text NOT NULL,
  date datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (fid)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Struktur dump for tabellen `jboard_forum_groups`
#

CREATE TABLE jboard_forum_groups (
  gid int(11) NOT NULL auto_increment,
  title text NOT NULL,
  KEY gid (gid)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Struktur dump for tabellen `jboard_posts`
#

CREATE TABLE jboard_posts (
  pid int(11) NOT NULL auto_increment,
  tid int(11) NOT NULL default '0',
  fid int(11) NOT NULL default '0',
  uid int(11) NOT NULL default '0',
  title tinytext NOT NULL,
  text text NOT NULL,
  date datetime NOT NULL default '0000-00-00 00:00:00',
  KEY pid (pid)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Struktur dump for tabellen `jboard_topic`
#

CREATE TABLE jboard_topic (
  tid int(11) NOT NULL auto_increment,
  uid int(11) NOT NULL default '0',
  fid int(11) NOT NULL default '0',
  topic text NOT NULL,
  date datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (tid)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Struktur dump for tabellen `jboard_users`
#

CREATE TABLE jboard_users (
  uid int(11) NOT NULL auto_increment,
  username text NOT NULL,
  firstname text NOT NULL,
  lastname text NOT NULL,
  location text NOT NULL,
  city text NOT NULL,
  signatur text NOT NULL,
  PRIMARY KEY  (uid)
) TYPE=MyISAM;
Avatar billede jolly_jay Nybegynder
15. marts 2004 - 10:31 #3
ups glemte dataen:

#
# Data dump for tabellen `jboard_forum`
#

INSERT INTO jboard_forum VALUES (1, 1, 'Generelt', 'Her kan du skrive lidt om hvad som helst.', '2004-03-09 13:30:00');
INSERT INTO jboard_forum VALUES (2, 2, 'Alt om intet', 'Ja, som titel\'en siger "alt om intet".', '2004-03-09 17:36:00');
# --------------------------------------------------------

#
# Data dump for tabellen `jboard_forum_groups`
#

INSERT INTO jboard_forum_groups VALUES (1, 'General');
INSERT INTO jboard_forum_groups VALUES (2, 'Off Topic');
# --------------------------------------------------------

#
# Data dump for tabellen `jboard_posts`
#

INSERT INTO jboard_posts VALUES (1, 1, 1, 1, '', 'Ja hvad sker der her?', '2004-10-03 11:24:00');
INSERT INTO jboard_posts VALUES (2, 1, 1, 1, '', 'ja det ved jeg ikke', '2004-03-13 21:20:00');
# --------------------------------------------------------

#
# Data dump for tabellen `jboard_topic`
#

INSERT INTO jboard_topic VALUES (1, 1, 1, 'Hvad sker der her?', '2004-10-03 11:24:00');
Avatar billede avminarm Juniormester
15. marts 2004 - 11:14 #4
du kan prøve med SELECT DISTINCT
Avatar billede jolly_jay Nybegynder
15. marts 2004 - 11:38 #5
nej det virker ikke :/
Avatar billede avminarm Juniormester
15. marts 2004 - 13:24 #6
giv mig lige et user og password så jeg kan prøve at lægge en post
Avatar billede jolly_jay Nybegynder
15. marts 2004 - 13:26 #7
jeg har ikke lavet bruger systemet og sådan at man kan poste endnu, da jeg først vil have visningen færdig
Avatar billede avminarm Juniormester
15. marts 2004 - 13:27 #8
der er en javascript fejl på siden iøvrigt
Avatar billede jolly_jay Nybegynder
15. marts 2004 - 13:30 #9
den er rettet, men jeg kan bare ikke komme på nogen måde at få den til at vise topic'ne kun en gang.
Avatar billede Slettet bruger
15. marts 2004 - 15:27 #10
Du skal bruge GROUP BY. Løsningen må blive en query i denne stil, og så burde du kunne nøjes med en enkelt i stedet for adskillige.

SELECT
  COUNT(jbp.*) AS antal,
  jbt.topic AS titel,
  jbu1.username AS forfatter,
  jbu2.username AS ny_forfatter,
  MAX(jbp.date) AS senest

FROM jboard_topic AS jbt,
    jboard_posts AS jbp,
    jboard_users AS jbu1,
    jboard_users AS jbu2

WHERE jbu1.uid = jbt.uid
  AND jbu2.uid = jbp.uid
  AND jbp.fid = jbt.fid
  AND jbt.fid = '$forum_fid'

GROUP BY jpt.tid

ORDER BY MAX(jbp.date)

Her har jeg kun nævnt de værdier, som vises på skærmen, men det burde være ret ligetil at tilføje resten, hvis det virker. Det er forresten en god ide ikke bare at SELECTe * - især når man kun har brug for enkelte af værdierne.
Avatar billede jolly_jay Nybegynder
15. marts 2004 - 16:57 #11
tak for hjælpen sandbox,

med dette virker det:

SELECT
    jbu.uid,
    jbu.username,
    jbp.date,
    jbp.tid,
    jbt.tid,
    jbt.topic,
    jbt.fid,
    jbt.uid
FROM
    jboard_topic as jbt,
    jboard_posts as jbp,
    jboard_users as jbu
WHERE
    jbu.uid = jbt.uid
    AND jbp.tid = jbt.tid
    AND jbt.fid = '$forum_fid'
GROUP BY
    jbt.tid
ORDER BY
    jbp.date
DESC

smid lige et svar :)
Avatar billede Slettet bruger
16. marts 2004 - 00:14 #12
Så fik du det jo ikke samlet til en enkelt query. Det ville ellers have været smart.
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