Avatar billede cronaldo Nybegynder
20. oktober 2010 - 12:42 Der er 8 kommentarer og
1 løsning

Opbygning af query i PHP

Hej!

Det, jeg ønsker, er, at jeg vil lave en query, der tjekker om der er kommet nye indlæg siden man sidst besøgt et topic.
De tre tabeller det drejer sig om og de relevante felter:

forum_topics
--------------
id
forum_id (= forummet id i tabellen over forummer)
author_id (= brugerens id i den tabel der indeholder brugeroplysninger)
date


forum_posts
--------------
id
topic_id (= forum_topics.id)
author_id (= brugerens id som ovenfor)
date


forum_topic_log
--------------
id
topic_id (= forum_topics.id)
user_id (indeholder det samme som de ovenstående author_id)
date
Avatar billede intenz Novice
20. oktober 2010 - 12:51 #1
Hvis user_id = author_id bør de hedde det samme. Det andet er forvirrende.

Du mangler at forklare hvordan du vil have trukket det ud. Har du et forum_id hvor du så vil kunne vise en liste af topic's med en true/false om der er kommet nyt?

Eller vil du bare have en liste over alle indlæg man har læst, og se om der er kommet nyt i et eller flere af dem?

Eller noget helt tredje?
Avatar billede cronaldo Nybegynder
20. oktober 2010 - 12:56 #2
Jeg vil egentligt bare have en "true/false" værdi.. For jeg har lavet et udtræk af topics'ene tidligere, men hvis det kan flettes ind i den query ville det være bedre...

Jeg omdøber den lige til author_id !!

Query'en til at hente topics ser ud som flg. (den er meget simpel):


$foresp = mysql_query("SELECT * FROM forum_topics WHERE forum_id = '".mysql_real_escape_string($_GET['forum_id'])."' ORDER BY id DESC LIMIT ".$offset.", ".$limit);
Avatar billede intenz Novice
20. oktober 2010 - 13:13 #3
Jeg var lidt hurtigt ude. Det er selvfølgelig en forskellig context du bruger dem i. En bruger er ikke nødvendigvis en author, så det vil også være forvirrende :)

Jeg ville tilføje et last_post felt til topics, så du altid ved hvornår det sidste indlæg er skrevet i et topic. Så slipper du for at skulle joine posts tabellen hver gang.
Og så opdatere 'date' i forum_topic_log når de læser et nyt indlæg i topic'et (eller hver gang de bare læser topic'et, lidt nemmere at styre).

Du kan så prøve denne, se om den virker som den skal.

SELECT forum_topics.*, forum_topic_log.date AS newposts
FROM forum_topics
LEFT JOIN forum_topic_log
ON (forum_topics.id=forum_topic_log.topic_id && forum_topics.date > forum_topic_log.date)
WHERE forum_topics.forum_id = '".mysql_real_escape_string($_GET['forum_id'])."'
ORDER BY forum_topics.id DESC
LIMIT ".$offset.", ".$limit

Så bør du kunne tjekke om 'newposts' har en værdi. Men det er ikke testet, kan være det ikke virker.
Avatar billede cronaldo Nybegynder
20. oktober 2010 - 13:27 #4
det skal vel være forum_topics.last_post > forum_topic_log.date
Avatar billede cronaldo Nybegynder
20. oktober 2010 - 13:40 #5
Problemet er, at den hente mange linjer ud med det topic når newpost indeholder noget?
Avatar billede cronaldo Nybegynder
20. oktober 2010 - 13:45 #6
lavede bare en:
GROUP BY forum_topic_log.topic_id

så virker det vidst :)

Tak for hjælpen :P
Avatar billede cronaldo Nybegynder
20. oktober 2010 - 14:12 #7
Der var jeg lidt for hurtigt ude.. Hvis jeg grupperer på ovenstående felt vælger den ascending ordering af rows'ene..

Jeg opdaterer ikke bare datoen i tabellen, men indlægger en ny linje ved hvert besøg og derfor tror jeg der skal ændres en smule, men jeg kan simpelthen ikke få det til at fungere.
Avatar billede intenz Novice
20. oktober 2010 - 14:19 #8
Ja, du bør ikke lægge en ny række ind hver gang. Hvis du kun har én række i forum_topic_log for hver bruger/topic kombination, bør du kunne lave kaldet uden brug af GROUP BY.
Avatar billede cronaldo Nybegynder
20. oktober 2010 - 14:47 #9
Nu virker det umiddelbart - kan jo være der kommer bugs senere, men det ser ud til at virke :P
Tak for hjælpen.
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