mboost-dp1
PHP: Inddel downloads i sider
- Forside
- ⟨
- Forum
- ⟨
- Programmering
#50:
Helt korrekt. Men, som jeg har nævnt hundrede gange, så sorterer den resultatet og ikke posterne.
Jeg vil gerne have databasen rent logisk tænker
1: først sorteres efter timestamps faldende
2: så findes unikke traadid'er
3: returner resultat
Det den gør er
1: først findes unikke traadid'er
2: så sorteres efter timestamp
3: returner resultat
#51: Præcis. Er det ikke blevet nævnt (eller er det ikke indlysende ;) ?
du vil have alle tråde spyttet ud, men trådene skal spyttes ud iforhold til hvornår de er lavet - korrekt?
Helt korrekt. Men, som jeg har nævnt hundrede gange, så sorterer den resultatet og ikke posterne.
Jeg vil gerne have databasen rent logisk tænker
1: først sorteres efter timestamps faldende
2: så findes unikke traadid'er
3: returner resultat
Det den gør er
1: først findes unikke traadid'er
2: så sorteres efter timestamp
3: returner resultat
#51: Præcis. Er det ikke blevet nævnt (eller er det ikke indlysende ;) ?
Jamen databasen kan selvfølgelig først sorterer når den har noget at sortere - derfor skal du lave et fornuftigt select statement som du så kan sortere i.
Det er klart du ikke kan sortere data du ikke har selected.
Mht. hvor mange tråde der vises så er det jo simpelt nok med noget php kode (jf. download side diskussionen).
Mht. unikke traadid'er, så er de vel unikke eftersom du har lavet en tabel til tråden?!?
Så det du åbenbart vil er at selecte alt, sortere det output på timestamps og dernæst parse dit array så du kun får outputtet 1 for hver unikke trådid (som jeg stadig ikke fatter, for det kan vel kun være unikt eftersom det er identifier i thread tabellen eller ?!?!).
Det er klart du ikke kan sortere data du ikke har selected.
Mht. hvor mange tråde der vises så er det jo simpelt nok med noget php kode (jf. download side diskussionen).
Mht. unikke traadid'er, så er de vel unikke eftersom du har lavet en tabel til tråden?!?
Så det du åbenbart vil er at selecte alt, sortere det output på timestamps og dernæst parse dit array så du kun får outputtet 1 for hver unikke trådid (som jeg stadig ikke fatter, for det kan vel kun være unikt eftersom det er identifier i thread tabellen eller ?!?!).
mon ikke dette kan bruges
http://dev.mysql.com/doc/mysql/en/union.html
lav to statements... andet tager resultatet fra første og bruger til at generere endeligt output... Du burde også kunne lave to statements i en linie men jeg kan sq ikke lige finde documentationen på den. Kan huske at den kan skrives noget lignende dette:
SELECT * FROM x WHERE (SELECT a FROM y WHERE noget='var')=var
http://dev.mysql.com/doc/mysql/en/union.html
lav to statements... andet tager resultatet fra første og bruger til at generere endeligt output... Du burde også kunne lave to statements i en linie men jeg kan sq ikke lige finde documentationen på den. Kan huske at den kan skrives noget lignende dette:
SELECT * FROM x WHERE (SELECT a FROM y WHERE noget='var')=var
hmm checkede lige tråden igen - du skriver:
"På chipsguidens forum har jeg login-tabellen:
loginid, status, brugernavn, kodeord, email, hjemmeside
og forum-tabellen:
postid, traadid, brugerid, emne, tekst, status, dato"
Hvis du stadig har status, så er det vel status du skal vælge og så sorte efter timestamp.
Altså:
SELECT * FROM threads WHERE status=thread ORDER BY timestamp DESC
"På chipsguidens forum har jeg login-tabellen:
loginid, status, brugernavn, kodeord, email, hjemmeside
og forum-tabellen:
postid, traadid, brugerid, emne, tekst, status, dato"
Hvis du stadig har status, så er det vel status du skal vælge og så sorte efter timestamp.
Altså:
SELECT * FROM threads WHERE status=thread ORDER BY timestamp DESC
Du vil have det ligesom newz hvor tråden rykker op når den er kommenteret formoder jeg.
Med db begrænsningen i baghovedet må løsningen være 2 selects
Det første select vælger du den oprindelige trådid, ved næste kører du det array i loop for at finde den nyeste af hver tråd.
Det output sorter du så via php og poster.
Det må være løsningen.
Du må iøvrigt undskylde lidt hvis mine indlæg ikke har givet så meget mening, men har åbenbart ikke helt forstået hvad det egentlig var du ville.
Med db begrænsningen i baghovedet må løsningen være 2 selects
Det første select vælger du den oprindelige trådid, ved næste kører du det array i loop for at finde den nyeste af hver tråd.
Det output sorter du så via php og poster.
Det må være løsningen.
Du må iøvrigt undskylde lidt hvis mine indlæg ikke har givet så meget mening, men har åbenbart ikke helt forstået hvad det egentlig var du ville.
@guppy
Bare lige for en god ordens skyld, er jeg godt klar over at mit eksempel ikke indeholder nogen UNION :-)
Hvis versionen af MySQL er for gammel til at man kan bruge UNION, kan man altid skrive til en tmp tabel, og så operere på den... det har man kunnet siden version 0.00001beta
Bare lige for en god ordens skyld, er jeg godt klar over at mit eksempel ikke indeholder nogen UNION :-)
Hvis versionen af MySQL er for gammel til at man kan bruge UNION, kan man altid skrive til en tmp tabel, og så operere på den... det har man kunnet siden version 0.00001beta
Jeg henter distinct traadid'er ud
For hver traadid henter jeg nyeste timestamp over i et array:
$traad[2][timestamp] = 200505052156 f.eks.
Tjekker om arrayet er tomt, hvis ikke
Sorterer array med arsort()
reset() bagefter for at nulstille array-pointeren
Spytter dem ud på side, sammen med brugernavn, timestamp omsat til læsbart tidsformat, antal svar osv
For hver traadid henter jeg nyeste timestamp over i et array:
$traad[2][timestamp] = 200505052156 f.eks.
Tjekker om arrayet er tomt, hvis ikke
Sorterer array med arsort()
reset() bagefter for at nulstille array-pointeren
Spytter dem ud på side, sammen med brugernavn, timestamp omsat til læsbart tidsformat, antal svar osv
#63
>.<
Der udover er den en operation der simpelthen koster for meget, så hvis det er mere end et "hygge" site er det ikke noget man bør bruge. (listen over de nyeste tråde med inlæg vil blive vist forholdsvist tit, specielt hvis den skal være på forside ala. phpnuke)
Hvis versionen af MySQL er for gammel til at man kan bruge UNION, kan man altid skrive til en tmp tabel, og så operere på den... det har man kunnet siden version 0.00001beta
>.<
From MySQL 3.23 on, you can use the TEMPORARY keyword when creating a table. A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. This means that two different connections can use the same temporary table name without conflicting with each other or with an existing non-TEMPORARY table of the same name. (The existing table is hidden until the temporary table is dropped.) From MySQL 4.0.2 on, you must have the CREATE TEMPORARY TABLES privilege to be able to create temporary tables.
Der udover er den en operation der simpelthen koster for meget, så hvis det er mere end et "hygge" site er det ikke noget man bør bruge. (listen over de nyeste tråde med inlæg vil blive vist forholdsvist tit, specielt hvis den skal være på forside ala. phpnuke)
Så tror jeg sørme jeg fik strikket et velfungerende forum sammen der opfylder alle mine behov
http://forum.butiksguiden.net
Det eneste jeg mangler er at integrere det med download-systemet og mulighed for at redigere sin bruger. Og så er der sikkert en masse fejl i koden der skal rettes.
http://forum.butiksguiden.net
Det eneste jeg mangler er at integrere det med download-systemet og mulighed for at redigere sin bruger. Og så er der sikkert en masse fejl i koden der skal rettes.
Det er jeg da glad for at høre :)
Det var lige før man skulle offentliggøre koden, hvis det ikke var fordi det er en omgang slamkode. Og for folk der ville forsøge at sabotere det pga. sikkerhedsbrister i koden. Tror bare jeg holder mig til Microsoft-metoden.
Og nå ja, så mangler jeg også at lave admin-del og mulighed for at rette egne indlæg. Men så er det jo godt jeg ikke har noget at lave på arbejde i morgen.
Det var lige før man skulle offentliggøre koden, hvis det ikke var fordi det er en omgang slamkode. Og for folk der ville forsøge at sabotere det pga. sikkerhedsbrister i koden. Tror bare jeg holder mig til Microsoft-metoden.
Og nå ja, så mangler jeg også at lave admin-del og mulighed for at rette egne indlæg. Men så er det jo godt jeg ikke har noget at lave på arbejde i morgen.
Nogen der har en ide om hvordan jeg får følgende regex til at acceptere urls med ?var=noget&noget=andet ?
$tekst = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a class=\"traadlink\" href=\"\\0\">\\0[/url]", $tekst);
--
Edit: Ja ok, det var jo rimelig nemt klaret, tilføj '?'.
Så kan man lære at uploade sin fil inden man tester om noget virker.
$tekst = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a class=\"traadlink\" href=\"\\0\">\\0[/url]", $tekst);
--
Edit: Ja ok, det var jo rimelig nemt klaret, tilføj '?'.
Så kan man lære at uploade sin fil inden man tester om noget virker.
Bedre sent end aldrig ...
Du kan formentlig undgå flere forespørgsler til databasen til din oversigt ved at bruge "group by" og "having".
Group by inddeler resultatet i grupper, efter f.eks. trådid.
Having kunne så udvælge den række i gruppen du ønsker (den seneste) ved at kræve tidspunkt = max(tidspunkt).
Så får du et resultatsæt med én række pr. tråd, og samtidig ville denne række være den nyeste. Hvis du så joiner tråd/indlægstabellen med forumtabellen inden, så får du vist det du skal bruge :)
Brug det hvis du vil, ellers så står det her hvis andre med samme udfordring snubler over tråden.
Du kan formentlig undgå flere forespørgsler til databasen til din oversigt ved at bruge "group by" og "having".
Group by inddeler resultatet i grupper, efter f.eks. trådid.
Having kunne så udvælge den række i gruppen du ønsker (den seneste) ved at kræve tidspunkt = max(tidspunkt).
Så får du et resultatsæt med én række pr. tråd, og samtidig ville denne række være den nyeste. Hvis du så joiner tråd/indlægstabellen med forumtabellen inden, så får du vist det du skal bruge :)
Brug det hvis du vil, ellers så står det her hvis andre med samme udfordring snubler over tråden.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.