TheClown Skrevet 24. juli 2007 Del Skrevet 24. juli 2007 (endret) Heisann. Jeg lager en portal til hjemmesiden min. Hjemmesiden min bruker phpBB 2 forum. Planene jeg hadde for siden var at de 10 siste postene fra en bestemt del av forumet kom i denne portalen. Det skulle også komme opp antall svar, forfatter av tråden, tidspunkt for posting og link til tråden. Med andre ord en del å gjøre. Under phpbb_topics er disse radene: forum_id, topic_title, topic_poster, topic_time, topic_replies. Hvordan kan jeg finne f.eks de 10 siste topic_title'ene under forum_id 1? SELECT `topic_title` FROM `phpbb_topics` WHERE `forum_id` = 1 Jeg er veldig noob når det gjelder MySQL. Har akkurat bestilt meg en bok fra bokkilden, men den har de ikke på lager Endret 27. juli 2007 av TheClown Lenke til kommentar
Crowly Skrevet 24. juli 2007 Del Skrevet 24. juli 2007 Er ikke helt sikker på dette, men jeg vil tro at dette skulle fungere. Er avhengig av hva og hvordan data'ene i topic_time blir lagret. SELECT `topic_title` FROM `phpbb_topics` WHERE `forum_id` = 1 ORDER BY topic_time DESC LIMIT 10 ORDER BY bestemmer hvordan informasjonen skal sorteres, og DESC bestemmer at det skal sorteres i synkende rekkefølge, eller nyeste først. LIMIT 10 begrenser søket til å returnere maks 10 rader, eller de 10 første. Lenke til kommentar
TheClown Skrevet 24. juli 2007 Forfatter Del Skrevet 24. juli 2007 Neste problem: Hvordan ligger infoen nå? Hvordan kan jeg hente frem infoen? Hvis jeg skal ha et table pr. topic_title. <table> </table> <table> </table> Osv. Lenke til kommentar
iNeo Skrevet 24. juli 2007 Del Skrevet 24. juli 2007 Må man ikke bruke arrays? Mener at alt det du trenger å vite blir forklart på www.sampsonresume.com, videotutorials! Anbefales! Lenke til kommentar
Crowly Skrevet 25. juli 2007 Del Skrevet 25. juli 2007 F.eks slik, men dette er gjordt utallige ganger her på forumet PHP <?php//koble til database ett eller annet sted $sql='SELECT `topic_title` FROM `phpbb_topics` WHERE `forum_id` = 1 ORDER BY topic_time DESC LIMIT 10'; $result=mysql_query($sql); while ($row=mysql_fetch_row($result)) { echo '<table class="xxyy"><tr><td>'.$row[0].'</td></tr></table>'; // evt så kan du bruke div // echo '<div class="yyxx">'.$row[0].'</div>'; } mysql_free_result($result); ?> Må formatere tabellen/div'en etter ønske med css. Med div så er det bare å bruke margin og padding for å lage det mellomrommet du måtte ønske, og evt border for å få på rammer osv Lenke til kommentar
TheClown Skrevet 25. juli 2007 Forfatter Del Skrevet 25. juli 2007 Blir SQl infoen lagret i en array? Kan man lage en vanelig while loop. $row[$nr] og $nr++ ? Lenke til kommentar
Crowly Skrevet 25. juli 2007 Del Skrevet 25. juli 2007 Blir SQl infoen lagret i en array? Kan man lage en vanelig while loop. $row[$nr] og $nr++ ? 9141568[/snapback] Ja, og jeg tror du har misforstått litt hva $row[0] er. [0] er ikke første rad, det er første feltet i den posten/raden som er nylig hentet fra databasen. Hadde jeg brukt mysql_fetch_assoc i stedet så måtte det stått $row['topic_title']. Slik den while løkka er skrevet nå så vil den hente ut 10 rader og skrive dem ut. Hvis du vil ha en teller i tillegg så gjør slik PHP <?php$i=1; while ($row=mysql_fetch_row($result)) { echo '<table class="xxyy"><tr><td>'.$i.' '.$row[0].'</td></tr></table>'; // evt så kan du bruke div // echo '<div class="yyxx">'.$row[0].'</div>'; $i++; } ?> Tror du bør lese litt mer om hvordan de forskjellige mysql_fetch_* funksjonene fungerer. mysql_fetch_row() (se linkene på venstre siden for flere funksjoner). mysq_fetch_row() (w3schools.com) Hvis du har denne selecten, SELECT felt1,felt2,felt3,felt4,felt5 FROM test og du bruker mysql_fetch_row so er $row[0] = felt1, $row[1]=felt2, ..., $row[4]=felt5. Variablen må ikke hete $row, men er veldig greit. Bruker du mysql_fetch_assoc så blir det $row['felt1'], $row['felt'2], ..., $row['felt5']. Bruker du mysql_fetch_array så er det det samme som så bruke både row og assoc i en, verdien i felt1 kan hentes med enten $row[0] eller $row['felt'1]. Regner med at denne funksjonen bruker mer minne enn fetch_row og fetch_assoc, siden den blir dobbelt så stor som de andre funksjonene. Lenke til kommentar
TheClown Skrevet 25. juli 2007 Forfatter Del Skrevet 25. juli 2007 (endret) jeg tenkte da at $row så noe alá dette ut: $row=array('Dette er den første nyhetssaken', 'Dette er den andre nyhetssaken, rofldage!!11', 'Her kommer den shity siste nyhetssaken, som er den tredde') Men dette er da feil? Eller hvordan kan jeg få et slikt resultat? Forsto ikke helt hva du mente ovenfor. Endret 25. juli 2007 av TheClown Lenke til kommentar
ZoRaC Skrevet 26. juli 2007 Del Skrevet 26. juli 2007 (endret) "SELECT felt1, felt2 FROM table" while ($row=mysql_fetch_row($result)) { echo $row[0]; //felt1 echo $row[1]; //felt2 } Endret 26. juli 2007 av ZoRaC Lenke til kommentar
Crowly Skrevet 26. juli 2007 Del Skrevet 26. juli 2007 (endret) Ja det er feil. Men det går ann å få det slikt, men ser ikke nødvendigheten av det i denne sammenhengen. For å ta utgangspunkt i phpbb tabellen som da får tre poster (ca) slik forum_id;topic_title;topic_poster;topic_time;topic_replies 1;test1;crowly;12345;5 2;test2;TheClown;12345;3 3;test3;Ståle;12345;6 Når man bruker denne koden PHP <?php$sql="SELECT forum_id, topic_title,topic_poster,topic_time,topic_replies FROM phpbb_topics LIMIT 10"; $result=mysql_query($sql); while ($row=mysql_fetch_row($result)) { echo "<pre>"; print_r($row); echo "</pre>"; } mysql_free_result($result); ?> Ved første kjøring av while løkka så vil $row se slik ut $row[0]=1 $row[1]=test1 $row[2]=crowly $row[3]=12345 (ett timestap regner jeg med) $row[4]=5 siden dette ikke er siste rad/post i tabellen, eller begrenset av LIMIT så vil whilen fortsette og hente inn neste rad/post som da for disse verdiene $row[0]=2 $row[1]=test2 $row[2]=TheClown $row[3]=12345 (ett timestap regner jeg med) $row[4]=3 fremdeles ikke siste rad/post, så neste hentes inn med disse verdiene $row[0]=3 $row[1]=test3 $row[2]=Ståle $row[3]=12345 (ett timestap regner jeg med) $row[4]=6 Dette er siste rad/post og while løkka vil da avslutte. Bruker du $row=mysql_fetch_assoc så må du gjøre slik for å få tak i verdiene i $row, resten er det samme $row['forum_id']=3 $row['topic_title']=test3 $row['topic_poster']=Ståle $row['topic_time']=12345 (ett timestap regner jeg med) $row['topic_replies']=6 Håper dette gjør det litt enklere å forstå hvordan du henter ut informasjonen fra databasen. Endret 26. juli 2007 av crowly Lenke til kommentar
TheClown Skrevet 26. juli 2007 Forfatter Del Skrevet 26. juli 2007 (endret) Ser fint ut Men for å gjøre det mer overskiktelig, kan man ta ut et og et felt gjennom forskjellige SELECT? $sq1="SELECT forum_id FROM phpbb_topics LIMIT 10" $sq2="SELECT topic_title FROM phpbb_topics LIMIT 10" Eller går det til helvette? Jeg lurer fremdeles på hva denne linja egentlig gjør: $result=mysql_query($sql); mysql_query() Spørring? Skjekker denne linja bare om databasene osv. er ok? $row['forum_id']=3 $row['topic_title']=test3 $row['topic_poster']=Ståle $row['topic_time']=12345 (ett timestap regner jeg med) $row['topic_replies']=6 9144955[/snapback] Er det ikke mulig å skille "sett" nr 1 fra nr 2? Hvis "sett" en er det du har ovenfor, hvordan kan du skille det fra f.eks dette: $row['forum_id']=43535 $row['topic_title']=homoeasifsdøofhdf $row['topic_poster']=Meg $row['topic_time']=1337 $row['topic_replies']=9999 Endret 26. juli 2007 av TheClown Lenke til kommentar
Crowly Skrevet 26. juli 2007 Del Skrevet 26. juli 2007 (endret) Men for å gjøre det mer overskiktelig, kan man ta ut et og et felt gjennom forskjellige SELECT? $sq1="SELECT forum_id FROM phpbb_topics LIMIT 10" $sq2="SELECT topic_title FROM phpbb_topics LIMIT 10" Eller går det til helvette? Det er fult mulig (og jeg vil ikke si det er mer oversiktlig, tror du bare må forstå hvordan det fungerer), men hvis du ønsker å optimalisere koden så mye som mulig, slik at den bruker minst mulig ressurser så burde du prøve å bruke minst mulig database oppslag. Kan du klare deg med ett, hvorfor bruke to ? Jeg lurer fremdeles på hva denne linja egentlig gjør: $result=mysql_query($sql); mysql_query() Spørring? Skjekker denne linja bare om databasene osv. er ok? mysql_query er funksjonen som utfører sql settningen mot databasen og hvis ikke noe går galt så returerer den en "ressursverdi"/resource. mysql_fetch_* funksjonene trenger denne resource'en for å fungere. Det blir vel en form for peker mot basen/tabell oppslaget, som går til neste rad for hver gang du utfører en mysql_fetch_*. Kan ikke så mye om akkurat dette, har bare lært meg at det er slik det skal brukes. Kanskje noen andre mere kyndige kan forklare det bedre. Er det ikke mulig å skille "sett" nr 1 fra nr 2? Hvis "sett" en er det du har ovenfor, hvordan kan du skille det fra f.eks dette: Verdiene i $row vil endres for hver gang mysql_fetch_* kjøres, så sett 1 forsvinner når sett 2 hentes inn osv. Hvis du ønsker å ta vare på tidligere sett så må du lagre de i en annen tabell, f.eks slik PHP <?php$sql="SELECT ...."; $result=mysql_query($sql); $i=1; while ($row=mysql_fetch_row($result)) { $tab[$i][]=$row[0]; $tab[$i][]=$row[1]; // evt flere felter $tab[$i][]=$row[5]; $i++; // div annen kode her man vil utføre } mysql_free_result($result); echo "<pre>"; print_r($tab); echo "</pre>"; ?> Da vil $tab[0] inneholde alle verdiene av $row fra første rad, $tab[1] alle verdiene av $row fra andre rad osv. $tab[0][0] har verdien fra forum_id i første rad, $tab[1][0] har forum_id fra andre rad. $tab[0][1] er topic_title fra første rad osv. Bruk print_r() funksjonen med <pre> tager rundt for å se verdiene i arrayene. Håper det var dette du lurte på, for jeg forstå ikke helt hva du spurte om. Endret 26. juli 2007 av crowly Lenke til kommentar
TheClown Skrevet 26. juli 2007 Forfatter Del Skrevet 26. juli 2007 Takk for bedre forklaring. Men verdiene i arrayene forandres altså hver gang loopen går? Hmm. Skal sette opp en testside nå og skjekke om jeg får alt til å funke Lenke til kommentar
Crowly Skrevet 26. juli 2007 Del Skrevet 26. juli 2007 Men verdiene i arrayene forandres altså hver gang loopen går? Bingo Lenke til kommentar
TheClown Skrevet 26. juli 2007 Forfatter Del Skrevet 26. juli 2007 Funka jo fett Med print_r fikk jeg dette: Array ( [0] => Nye Funksjoner #3 [1] => 2 [2] => 1184781929 [3] => 1 ) Array ( [0] => Flere funksjoner #2 [1] => 2 [2] => 1184498834 [3] => 4 ) Array ( [0] => Flere funksjoner #1 [1] => 2 [2] => 1184417540 [3] => 10 ) Array ( [0] => RingerikeUngdom.net [1] => 2 [2] => 972086460 [3] => 3 ) Som er helt riktig Elsker deg crowly Lenke til kommentar
TheClown Skrevet 27. juli 2007 Forfatter Del Skrevet 27. juli 2007 Alt funker veldig pent nå...MEN! Jeg skulle gjerne tatt ut en del mer info. Jeg har prøvd nå i flere timer men får det ikke til. Dette må jeg også få tatt ut fra databsen: brukernavn på brukeren som postet tråden. ['topic_poster'] viser bare hvilke id brukeren hadde. Så jeg tenkte at: SELECT `username` from `phpbb_users` WHERE `user_id` = $row[1] Men dette funka da, ikke. Noen som har peil på hvordan jeg kan ta ut navnet når jeg har iden? Jeg må også ta ut innholdet fra første post under hver tittel. Den ligger under `phpbb_posts_text` table `post_text` PÅ forhådn takk Lenke til kommentar
ZoRaC Skrevet 27. juli 2007 Del Skrevet 27. juli 2007 Tatt fra luften, så kan være noen småfeil her, men noe slikt: SELECT username, forum_id, topic_title, topic_time FROM phpbb_topics INNER JOIN phpbb_users ON phpbb_topic.topic_poster=phpbb_users.user_id LIMIT 10 Les mer om JOIN her: http://www.w3schools.com/sql/sql_join.asp Lenke til kommentar
Crowly Skrevet 27. juli 2007 Del Skrevet 27. juli 2007 Tatt fra luften, så kan være noen småfeil her, men noe slikt: SELECT username, forum_id, topic_title, topic_time FROM phpbb_topics INNER JOIN phpbb_users ON phpbb_topic.topic_poster=phpbb_users.user_id LIMIT 10 Les mer om JOIN her: http://www.w3schools.com/sql/sql_join.asp 9153225[/snapback] Evt slik, JOINs er vel mer speifikt til Mysql og denne varrianten er vel mer "vanlig" sql (tror jeg) SELECT t2.username, t1.forum_id, t1.topic_title, t1.topic_time FROM phpbb_topics t1, phpbb_users t2 WHERE t1.topic_poster = t2.user_id LIMIT 10 t1 og t2 er alias på tabellene phpbb_topics og phpbb_users PHP <?php $sql="SELECT `username` from `phpbb_users` WHERE `user_id` = ".$row[1]; ?> Dette vil fungere, men du må legge dette oppslaget inn i den første while løkka, og det resulterer i at du gjør ett nytt oppslag mot databasen for hver post, dette er unødvendig ressursbruk. Prøv å hold antall database oppslag til ett minimum. Lenke til kommentar
TheClown Skrevet 27. juli 2007 Forfatter Del Skrevet 27. juli 2007 (endret) Hva er t2. og t1. for? I det eksemepet litt vil den ikke hente ut fra forum_id 1 osv. Endret 27. juli 2007 av TheClown Lenke til kommentar
ZoRaC Skrevet 27. juli 2007 Del Skrevet 27. juli 2007 At du kan skrive t1 istedet for phpbb_topics og t2 istedet for phpbb_users i spørringen (sparer noen tegn i skriving ) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå