slacky Skrevet 16. desember 2011 Del Skrevet 16. desember 2011 (endret) Hei. Sliter med å legge opp en spørring, hvor jeg har et "wall"system, vennesystem, og dette skal kobles opp i en enkelt spørring. NULL PROBELEM so far... Men jeg ønsker samtidig å hente ut veggposter jeg/(brukeren selv) har skrevet selv. Del-løsningen jeg har bygd opp idag henter altså bare venners poster, dermed ønsker jeg litt hjelp til å lage en fungerende sprring for dette. $userid = $userdata['user_id']; //den brukeren som surfer/fører spørringen $result = dbquery( "SELECT wall.* FROM wall AS wall INNER JOIN friends AS fs ON fs.fs_to = wall.post_writer AND fs.fs_user = '".$userid."' AND fs_accepted = '1' ORDER BY wall.post_date DESC LIMIT 0,40;" ); while($view=dbarray($result)) { //Data føres er her. Ønsker mine/brukerens egene poster her OGSÅ. } dbarray og dbquery er bare aliaser/fuksjoner som fører standard spørring. Brukertabellen er standard lagt opp user_id, user_name etc... Endret 16. desember 2011 av warpie Lenke til kommentar
Thomas. Skrevet 16. desember 2011 Del Skrevet 16. desember 2011 Du må legge til en join til etter den du har Du har alt wall.post_writer, så da kan du sette verdien av den = user_name i den andre joinen. SELECT * FROM X INNER JOIN 1 INNER JOIN 2 ORDER / GROUP BY Lenke til kommentar
slacky Skrevet 17. desember 2011 Forfatter Del Skrevet 17. desember 2011 (endret) Du må legge til en join til etter den du har Du har alt wall.post_writer, så da kan du sette verdien av den = user_name i den andre joinen. SELECT * FROM X INNER JOIN 1 INNER JOIN 2 ORDER / GROUP BY Ser ikke hvordan det skal fungere. Problemet med en slik spørring er nå at den vil forsøke å joine begge, samtidig. Må jo nesten være enten join 1, eller join 2.. For ellers blir jeg nødt til å legge alle brukere inn i vennetabellen (noe som blir dumt...). SELECT wall.* FROM wall AS wall INNER JOIN friends AS fs ON fs.fs_to = wall.post_writer AND fs.fs_user = '{$userid}' AND fs_accepted = '1' INNER JOIN users AS u ON u.user_id = wall.post_writer AND u.user_id = '{$userid}' ORDER BY post_date DESC LIMIT 0,40; En ser fort at dette resulterer i 0 rader! De motsier jo hverandre, JOIN1 spør etter BARE venners poster, mens JOIN2 spør etter BARE brukerens poster. Fjerner jeg _ AND u.user_id = '{$userid}' _, så vil det bare skjekke om kompisen/vennen som har skrevet innlegget er en bruker... EDIT: Fikk til å gjøre det, tror det ble korrekt, om noen har noe å si på denne så for all del, spytt ut! SELECT wall.* FROM wall AS wall LEFT JOIN friends AS fs ON fs.fs_to = wall.post_writer AND fs.fs_user = '".$userid."' AND fs_accepted = '1' INNER JOIN users AS u ON u.user_id = wall.post_writer AND u.user_id = '".$userid."' OR u.user_id = fs.fs_user ORDER BY post_date DESC LIMIT 0,40; Endret 17. desember 2011 av warpie Lenke til kommentar
torbjørn marø Skrevet 17. desember 2011 Del Skrevet 17. desember 2011 Jeg syntes dette hørtes ut som en jobb for UNION Lenke til kommentar
slacky Skrevet 17. desember 2011 Forfatter Del Skrevet 17. desember 2011 (endret) Hadde nok gjort jobben lettere om jeg hadde kjent til UNION. Får vel bare huske på det til fremover. //Microedit: Innlegg nr. 500! Endret 17. desember 2011 av warpie Lenke til kommentar
Thomas. Skrevet 18. desember 2011 Del Skrevet 18. desember 2011 EDIT: Fikk til å gjøre det, tror det ble korrekt, om noen har noe å si på denne så for all del, spytt ut! SELECT wall.* FROM wall AS wall LEFT JOIN friends AS fs ON fs.fs_to = wall.post_writer AND fs.fs_user = '".$userid."' AND fs_accepted = '1' INNER JOIN users AS u ON u.user_id = wall.post_writer AND u.user_id = '".$userid."' OR u.user_id = fs.fs_user ORDER BY post_date DESC LIMIT 0,40; Ser greit ut det der Jeg syntes dette hørtes ut som en jobb for UNION UNION blir vel ikke riktig og bruke her? Vet ingenting om database-strukturen hans. Lenke til kommentar
BlueEAGLE Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 (endret) Jeg synes dette høres ut som noe for en subquery SELECT * FROM WallPosts WHERE WallPosts.UserID IN (SELECT FriendID FROM FriendsTable WHERE UserID = 'CURRENT_USER_ID') OR WallPosts.UserID = 'CURRENT_USER_ID' Altså, det du gjør er å velge ut spørring fra tabellen med veggposter bastert på om posterens UserID er gjeldende bruker (CURRENT_USER_ID) eller om den finnes blandt alle FriendID i FriendsTable hvor UserID = CURRENT_USER_ID Denne syntaksen virker for MSSQL. Jeg er litt usikker på hvordan underspørringer virker i MySQL, men konseptet bør være likt. Husk at hvis vennetabellen er veldig stor så kan der være fornuftig å legge en indeks på FriendsTable.UserID slik at denne spørringen ikke tar vinter og vår. Håper det hjelper. Edit: Jeg har stipulert følgende tabelstruktur WallPosts --------- ID // Unique identifier for any given wall post UserID // Unique identifier linking any given wall post to a spesific user Content // The contents of the wall post FriendsTable ------------ ID // Unique iidentifier for any given friend relationship (not really necessary) UserID // The ID of the person being friended FriendID // The ID of the friend Legg merke til at dette skjemaet tillater at en person er venn med en bruker uten at brukeren er venn med personen. Dette er ikke nødvendigvis ønskelig. Det kan være at du vil ha en User1ID og en User2ID slik at du kun har en oppføring for et venneforhold i vennetabellen. I såfall så trenger du to underspørringer for å finne alle instansene hvor CURRENT_USER_ID er User1ID og alle instansene hvor CURRENT_USER_ID er User2ID Endret 29. desember 2011 av BlueEAGLE 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å