Avatar billede cmau Nybegynder
19. juni 2007 - 19:04 Der er 12 kommentarer og
1 løsning

10 senste aktive debatter

Hej eksperter

Mig og nogle gutter har lavet et debasystem, men skal nu lave det sidste dertil, nemlig så man på forsiden kan se de 10 debatemner, som har været aktive (Nyoprettede emner skal også gå ind her under.

Jeg har et felt, date, med timestamp, både for debatemner og debatindlæg. Min debatstruktur ser således ud:

CREATE TABLE `debate_topics` (
  `id` int(11) NOT NULL auto_increment,
  `userid` int(11) NOT NULL default '0',
  `subjectid` int(11) NOT NULL default '0',
  `title` varchar(255) NOT NULL default '',
  `date` int(11) NOT NULL default '0',
  `content` text NOT NULL,
  `ip` varchar(255) NOT NULL default '',
  `views` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

CREATE TABLE `debate_entries` (
  `id` int(11) NOT NULL auto_increment,
  `topicid` int(11) NOT NULL default '0',
  `userid` int(11) NOT NULL default '0',
  `content` text NOT NULL,
  `date` int(11) NOT NULL default '0',
  `ip` varchar(255) NOT NULL default '',
  `subjectid` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
Avatar billede jakobdo Ekspert
19. juni 2007 - 21:17 #1
Er det ikke noget i stil med:
Dette vil give dig de sidste 10 indlæg, men samme topic kan være med flere gange:
SELECT * FROM debate_entries ORDER BY date DESC LIMIT 10

Dette vil give dig de sidste 10 indlæg og være fra forskellige topics:
SELECT * FROM debate_entries GROUP BY topicid ORDER BY date DESC LIMIT 10

Og hvis du også vil have title med, så bliver det:
SELECT de.*, dt.title FROM debate_entries AS de INNER JOIN debate_topics AS dt ORDER BY de.date DESC LIMIT 10

Og næste det samme på den anden også.
Avatar billede cmau Nybegynder
19. juni 2007 - 22:35 #2
Jeg har prøvet med dem, men det er noget med
SELECT * FROM debate_entries GROUP BY topicid ORDER BY date DESC LIMIT 10

MEN
Den skal også vise nye topics, selvom der ikke er skrevet i dem.
Avatar billede jakobdo Ekspert
20. juni 2007 - 08:12 #3
Noget i denne stil:

SELECT dt.title, dt.data AS dDate FROM debate_topics AS dt UNION SELECT de.content, de.date AS dDate FROM debate_entries AS de ORDER BY dDate DESC LIMIT 10
Avatar billede cmau Nybegynder
20. juni 2007 - 21:11 #4
altså dt.data findes ikke, men hvis der skulle så date, så virker det, men viser slet ikke det rigtige.

Jeg tror den henter indlæg ud eller sådan noget.

Jeg prøver lige at forklare igen.

Vi vil have de 10 seneste aktive debatemner på en liste.
Hver debatemne må kun optræde en gang.
En aktiv debatemne er også et helt nyoprettet en, så den skal tage højde for indlæg og emners date.
Avatar billede jakobdo Ekspert
20. juni 2007 - 21:31 #5
Jeg forstår dig ikke så, du må forklare dig lidt nærmere.
Avatar billede cmau Nybegynder
20. juni 2007 - 23:36 #6
Altså vi vil have en liste over debatter med som senest har været aktive.
Hver debatemne må kun optræde en gang på listen.
Men så som ekstra ting, vil vi gerne have at nye debat emner, uden indlæg også kommer på listen.
Avatar billede jakobdo Ekspert
21. juni 2007 - 07:26 #7
Så tror jeg måske den var der:

SELECT dt.title,dt.date AS dtDate,de.date AS dtDate FROM debate_topics AS dt LEFT JOIN dabate_entries AS de ON dt.id = de.topicid ORDER BY IF(ISNULL(de.date),dt.date,de.date) DESC LIMIT 10
Avatar billede jakobdo Ekspert
21. juni 2007 - 10:23 #8
Manglede lige en GROUP BY dt.id

Prøv denne:

SELECT dt.title
FROM debate_topics AS dt
LEFT JOIN debate_entries AS de ON dt.id = de.topicid
GROUP BY dt.id
ORDER BY IF( ISNULL( de.date ) , dt.date, de.date ) DESC
LIMIT 10
Avatar billede cmau Nybegynder
21. juni 2007 - 11:54 #9
Nu begynder det at blive interssant. Ser ud til at virke. Tusind tak :D

Smider du svar?

- Nu skal jeg bare lige sætte mig ind i det, så jeg har mulighed for at bruge det en anden gang.
Avatar billede jakobdo Ekspert
21. juni 2007 - 11:55 #10
Svar!
Avatar billede jakobdo Ekspert
21. juni 2007 - 12:53 #11
Takker for point.
Avatar billede cmau Nybegynder
07. juli 2007 - 13:10 #12
jakobdo !!

Når der kommer flere emner, så virker den ikke. Hvis man skriver til det ældste emne, kommer den ikke først.
Avatar billede jakobdo Ekspert
09. juli 2007 - 21:55 #13
Jeg tror faktisk den var her:

SELECT DISTINCT de.topicid,dt.title,de.date,dt.date
FROM debate_topics AS dt
LEFT JOIN debate_entries AS de ON dt.id = de.topicid
ORDER BY IFNULL(de.date, dt.date) DESC
LIMIT 10
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