vevo1992 Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 Hei, jeg har laget en liten side der folk kan abonnere på andre, har problemer med nyhetsfeed som på facebook. Jeg har en liste som velger ut det siste postene for de jeg abonnere på, problemet er at jeg kun får en post og at de er i feil rekkefølge. Kan noen ta en titt? Ønske er å slå sammen to tabeller som vil vise absolut siste post fra dem jeg følger øverst. Takk for all hjelp! Slik ser PHP koden ut som jeg selv har skrevet; <?php $me = $_SESSION['userid']; $get_w = mysql_query("SELECT * FROM abonnenter WHERE bruker='$me'"); $check_get_frn = mysql_num_rows($get_w); if (empty($check_get_frn)) { echo 'Legg til folk for å se poster.'; } else { while($get_frn = mysql_fetch_array($get_w)) { $setn = $get_frn['venn']; $set_name = mysql_query("SELECT * FROM alle_brukere WHERE userid='$setn'"); $show_name = mysql_fetch_array($set_name); $select_post = mysql_query("SELECT * FROM poster WHERE post_bruker='$setn' AND bruker='$setn' ORDER BY id DESC"); $show_feed = mysql_fetch_array($select_post); } ?> Lenke til kommentar
The Jackal Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 mysql_fetch_array returnerer hele resultatsettet, så du trenger ikke å ekskvere den i en while loop. Ta en kikk her http://php.net/manual/en/function.mysql-fetch-array.php så kan du se hvordan den kan brukes. Du kan forøvrig kjøre hele den SQLen som 1 query istedetfor å kjøre 3 forskjellige selects, eventuelt bare slå sammen de 2 siste om du vil beholde den if else saken du har der. Lenke til kommentar
vevo1992 Skrevet 1. februar 2012 Forfatter Del Skrevet 1. februar 2012 Men jeg må vel kjøre en while for å få frem alle de siste postene?? Lenke til kommentar
The Jackal Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 Sjekk linken...der står det eksempel. Du skal bruke en foreach rundt det mysql_fetch_array returnerer. Lenke til kommentar
The Jackal Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 uhm...driti litt på leggen her...det ser ut som om det du har gjort funker også, så bare glem det jeg har skrevet foreløpig Lenke til kommentar
vevo1992 Skrevet 1. februar 2012 Forfatter Del Skrevet 1. februar 2012 Hehe, det går helt fint du! For jeg har ikke problemer med å få resultater, hehe! Men jeg har ikke logikken på rette plassen akkurat på dette området, for jeg vil ha den siste posten av de jeg abonnerer på i rett rekkefølge. For å forklare det helt i detalj: Istedet for å vise alle postene som ligger i databasen vil jeg kun vise siste post fra mine abonnenter, som på twitter Lenke til kommentar
The Jackal Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 Om det er slik at du får for mange poster, kan du legge til Limit 0,1 i slutten av SQLen din. Altså noe slik: $select_post = mysql_query("SELECT * FROM poster WHERE post_bruker='$setn' AND bruker='$setn' ORDER BY id DESC LIMIT 0,1"); Lenke til kommentar
vevo1992 Skrevet 1. februar 2012 Forfatter Del Skrevet 1. februar 2012 Nei, er ikke det som er problemet. Jeg får alle de siste postene men i feil rekkefølge med tanke på når de ble postet Lenke til kommentar
vevo1992 Skrevet 1. februar 2012 Forfatter Del Skrevet 1. februar 2012 (endret) Jeg har altså en tabell med alle brukere, en med alle de jeg abonnerer på og en med alle poster. Men hvordan kan jeg hente postene fra de jeg abonnerer på i fra "all poster tabellen" ? Abonnenter -> alle poster -> postene til abonnentene i rett rekkefølge. Om dere tenker Twitter er det enklere å forstå da? At du kan se siste posten utifra de du abonnere på?? Endret 1. februar 2012 av vevo1992 Lenke til kommentar
The Jackal Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 Bruk ASC istedetfor DESC i order by da kanskje. Lenke til kommentar
vevo1992 Skrevet 1. februar 2012 Forfatter Del Skrevet 1. februar 2012 Har prøvd, det blir feil. Lenke til kommentar
The Jackal Skrevet 1. februar 2012 Del Skrevet 1. februar 2012 Du må ha en dato kolonne eventuelt en autoinkrement nøkkel å sortere på da. Om ikke iden du sorterer på nå gir rett rekkefølge, så må det være noe rart med den Lenke til kommentar
vevo1992 Skrevet 1. februar 2012 Forfatter Del Skrevet 1. februar 2012 Har ID nummer med auto_increment, men hvordan skal PHP koden vite hvilke poster den skal plukke ut? Jeg forstår prosessen men ikke den logiske oppsetten Lenke til kommentar
alfred97 Skrevet 2. februar 2012 Del Skrevet 2. februar 2012 Slik jeg leser koden din, gjør den følgende: 1. Skaff en liste over alle venner som din bruker abonnerer på, i tilfeldig rekkefølge (egentlig ikke tilfeldig, for det blir den rekkefølgen abonnementene er registrert - men i denne sammenhengen er jo nettopp det å betrakte som tilfeldig). 2. For hver av disse vennene, 2a) Dra ut all informasjon om personens brukerkonto, og 2b) Dra ut alle postene fra den aktuelle personen, i omvendt kronologisk rekkefølge. Jeg ser ikke at du gjør noe som helst med verken brukerinformasjonen eller postene, men det går jeg ut fra at du gjør i kode som du ikke har publisert her. Jeg antar videre at det du ønsker er å vise alle postene i omvendt kronologisk rekkefølge. Du oppgir bare at rekkefølgen du får dem ut i er feil, uten å spesifisere hvilken rekkefølge du faktisk får. Ut fra koden din antar jeg imidlertid at du først får ut alle poster for person 1, internt sortert i riktig rekkefølge - deretter alle poster for person 2, internt sortert i riktig rekkefølge - og så videre. I så fall er grunnen åpenbar hvis man ser nøye på algoritmen du har brukt. Forutsatt at jeg nå har skjønt problemstillingen riktig, blir mitt tips derfor at du i stedet for å splitte opp spørringen din etter hvilke tabeller du spør mot, heller sammenstiller tabellene i en subquery. Prøv noe i denne gata: "select * from poster where post_bruker = (select ____ from abonnenter where bruker='$me') order by id desc", hvor ____ erstattes av feltnavnet for brukeren som det abonneres på i tabellen "abonnenter" (det fremgår ikke hva dette feltnavnet heter). Jeg har ikke tid til å kvalitetssikre spørringen min nå, så den er ikke garantert å være 100% riktig syntaktisk, men det er ideen som er poenget her. Se eventuelt http://dev.mysql.com/doc/refman/5.1/en/subqueries.html for dokumentasjon på subquery-syntaks. Lenke til kommentar
molty Skrevet 2. februar 2012 Del Skrevet 2. februar 2012 (endret) <?php $me = $_SESSION['userid']; $get_w = mysql_query("SELECT * FROM abonnenter WHERE bruker='$me'"); $check_get_frn = mysql_num_rows($get_w); if (empty($check_get_frn)) { echo 'Legg til folk for å se poster.'; } else { $friends = array(); while($get_frn = mysql_fetch_assoc($get_w)) { $friends[] = $get_frn['venn']; } $userQuery = ''; $postQuery = ''; foreach($friends as $a){ if(empty($userQuery)){ $userQuery.= "bruker='$a'"; } else{ $userQuery.=" OR bruker='$a'"; } if(empty($postQuery)){ $postQuery.= "post_bruker='$a'"; } else{ $postQuery.=" OR post_bruker='$a'"; } } $select_post = mysql_query("SELECT * FROM poster WHERE ($postQuery) AND ($userQuery) ORDER BY id DESC"); while($show_feed = mysql_fetch_assoc($select_post)){ // ouputen her // Hvis du må hente brukerinfo, lag spørringen innenfor denne while loopen } } ?> Mener dette skal holde Molty Endret 2. februar 2012 av molty Lenke til kommentar
The Jackal Skrevet 2. februar 2012 Del Skrevet 2. februar 2012 Jeg tror han må ha en group by clause for å kunne hente ut kun den siste posten. Noe ala "SELECT post_bruker,post_tekst,Max(id) FROM poster WHERE post_bruker='$setn' AND bruker='$setn' ORDER BY id DESC GROUP BY post_bruker" Lenke til kommentar
alfred97 Skrevet 2. februar 2012 Del Skrevet 2. februar 2012 Ser at det dukker opp flere løsninger her, med helt forskjellig vinkling. Når folk forstår problemstillingen på så mange forskjellige måter, er det sannsynligvis et signal om at trådstarter ikke har beskrevet målsetningen sin presist nok. Lenke til kommentar
vevo1992 Skrevet 2. februar 2012 Forfatter Del Skrevet 2. februar 2012 (endret) Hei, jeg skal prøve ut kodene og forklaringene dere har tilbakemeldt, takk skal dere ha! Så skal jeg også prøve å beskrive igjen så godt jeg kan. Det gjør ingenting om jeg skal lage databaseoppsett eller skrive kode på nytt, men det eneste jeg ønsker er akkurat slik som på twitter. Jeg har en tabell med alle registrerte brukere, en tabell som jeg kaller abonnenter slik at når jeg klikke "Abonner" på en person vil det lages en link mellom meg og den personen. Slik: Meg + Venn. Da har jeg begynt å abonnere på han. Han skriver innlegg på sin side og det samme gjør alle andre på sine sider. Det jeg ønsker å lage er at jeg kan klikke på "Siste post fra abonnenter". Da vil jeg at den siste posten som ble skrevet øverst hvor den gamleste posten ligger i bunn, men sortert fra alle mine abonnenter f.eks; 4. Ola Nordmann: Heihei 3. alfred97: Tredje post 2. molty: Andre post 1. The Jackal: Første post! Om jeg velger å fjerne Ola Nordmann fra mine abonnenter klikker jeg "Fjern". Da vil alle postene fra Ola Nordmann forsvinne fra postene som er synlig for meg. Siden kan f.eks. ha 100 brukere men at kun de jeg abonnerer er det postene jeg vil se, siden jeg abonnerer på de. Jeg har en tabell med alle postene som blir skrevet på siden, men jeg vil plukke ut de postene den brukeren har skrevet på sin egen side til denne abonnent siden hvor jeg kan da se disse postene. Kan noen forklare meg hvordan det går an å sette opo noen slikt? Håper dette er enklere å forstå Takk for all deres hjelp! Endret 2. februar 2012 av vevo1992 Lenke til kommentar
molty Skrevet 2. februar 2012 Del Skrevet 2. februar 2012 Ser at det dukker opp flere løsninger her, med helt forskjellig vinkling. Når folk forstår problemstillingen på så mange forskjellige måter, er det sannsynligvis et signal om at trådstarter ikke har beskrevet målsetningen sin presist nok. Slik jeg oppfattet det hvertfall har han opprettet en tabell som inneholder abonnering på andre brukere. I den tabellen lagrer han bruker id til personene han abonnerer og henter ut alle ved å kjøre en spørring hvor hans egen id står opplyst. Problemet han slik jeg oppfattet det var at han bare fikk ut en post fra hver bruker, men at de også kom i feil rekkefølge. Dette fordi han tok en while loop på abonnemangene og hadde resten av spørringene der inni, som først og fremst bare gav 1 post og feil rekkefølge. Derfor i min løsning hentet jeg ut alle bruker id som personen abonnerer på og la i en egen array, som senere gjorde om til en variabel som ville brukes i spørringen hans. Ut i fra hvordan spørringen fylte jeg inn slik at det passet inn hvordan den var fra før. Det jeg gjorde så var å skrive ut alle postene slik jeg gjorde, lol.. Men innså nå at jeg har gjort en liten feil som jeg skal rette opp i NO Molty Lenke til kommentar
vevo1992 Skrevet 2. februar 2012 Forfatter Del Skrevet 2. februar 2012 (endret) Helt 100% korrekt molty! Jeg prøvde koden din, men leser at du har gjort en feil. Jeg fikk denne meldingen: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /test.php on line 33 Jeg måtte jo legge til kobling av database osv, så linjenr. er jo litt forandret. Skal poste hvordan det ser ut hos meg: 30 } 31 32 $select_post = mysql_query("SELECT * FROM poster WHERE ($postQuery) AND ($userQuery) ORDER BY id DESC"); 33 while($show_feed = mysql_fetch_assoc($select_post)){ 34 // ouputen her 35 // Hvis du må hente brukerinfo, lag spørringen innenfor denne while loopen 36 echo $show_feed['post'] . '<br>'; 37 } 38 } 39 ?> Endret 2. februar 2012 av vevo1992 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å