mboost-dp1

PHP: Inddel downloads i sider


Gå til bund
Gravatar #51 - guppy
4. maj 2005 10:16
Deternal det han prøver på er vist at få vist de sidste X tråde der er indlæg i...
Gravatar #52 - Ronson ⅍
4. maj 2005 10:34
#50:
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 ;) ?
Gravatar #53 - Deternal
4. maj 2005 11:14
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 ?!?!).
Gravatar #54 - Ronson ⅍
4. maj 2005 11:42
Tråd-tabellen indeholder både oplæg og indlæg som du kan se i screenshottet, altså tråde og svar. Derfor er der en masse posteringer med ens traadid - jeg skal kun have ét unikt resultat pr. traadid.
Gravatar #55 - Wolly
4. maj 2005 12:34
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
Gravatar #56 - Wolly
4. maj 2005 12:38
woops det burde vist være:

SELECT * FROM (SELECT a FROM y WHERE noget='var') WHERE noget=var
Gravatar #57 - Ronson ⅍
4. maj 2005 12:48
Sub-queries er ikke understøttet i den version, men union står til at være understøttet fra v4.0 så det kigger jeg lige på.. Hvis jeg kan rumme det.

Nogen ideer til en query?
Gravatar #58 - guppy
4. maj 2005 12:49
#55+56

I nummer #6 råder jeg ham til at bruge subqueries, i #38 fortæller han mig så at han bruger en mysql udgave der er for gammel..

og ja det du viser en en subquery, ikke en union
Gravatar #59 - Deternal
4. maj 2005 13:12
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
Gravatar #60 - Ronson ⅍
4. maj 2005 13:34
Nej for jeg skal liste trådene efter nyeste svar, jeg kan se ikke se nyeste svar ud fra emnerne/oplæggene :)
Gravatar #61 - Deternal
4. maj 2005 14:28
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.
Gravatar #62 - Ronson ⅍
4. maj 2005 15:22
Hm, så tror jeg sørme det virker.
Gravatar #63 - Wolly
4. maj 2005 16:57
@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
Gravatar #64 - Deternal
4. maj 2005 17:59
Ronson:
Bare for god ordens skyld, hvordan fik du det så til at virke.
Gravatar #65 - Ronson ⅍
4. maj 2005 19:08
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
Gravatar #66 - guppy
6. maj 2005 06:34
#63
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)
Gravatar #67 - Ronson ⅍
12. maj 2005 12:57
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.
Gravatar #68 - Wolly
12. maj 2005 14:44
Jeg må sige at jeg virkelig synes at det er et flot forum... Det virker meget overskueligt, og grafisk er det super flot!!!
Gravatar #69 - Ronson ⅍
12. maj 2005 16:53
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.
Gravatar #70 - Ronson ⅍
17. maj 2005 11:45
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.
Gravatar #71 - Boggie
17. maj 2005 14:46
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.
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.

Opret Bruger Login