16. november 2010 - 16:42Der er
16 kommentarer og 1 løsning
codeigniter join problem
Hej, jeg vil gerne selecte fra 3 tabeller "forum_traad" "forum_kommentare" "users"
skal hente alle felter i "forum_traad" og "forum_kommentare" og kun hente feltet "profil_billed" i min users tabel, og jeg skal vise det billed som passer til den bruger der har oprettet tråden, og den som har oprettet en kommentar til tråden,
har i felt i min "forum_traad" og min "forum_kommentare" der hedder "brugernavn" og den skal jo så matche "brugernavn" i "users" tabellen.
håber i forstår hvad jeg mener, det jeg har lavet endtil nu er det her
[code lang="PHP"] $this->db->select('*,forum_traad.indhold as traad_indhold, forum_kommentare.indhold as kommentare_indhold, forum_traad.brugernavn as traad_brugernavn, forum_traad.id as traad_id, users.profil_billed as billed '); $this->db->from('forum_traad'); $this->db->join('forum_kommentare', 'forum_kommentare.fk_forum_traad = forum_traad.id'); $this->db->join('users', 'forum_traad.brugernavn = users.profil_billed'); $this->db->where('forum_traad.id', $id); $query = $this->db->get(); [/code]
og i min view fil jeg har lavet
[code lang="PHP"] if($query) { echo $query->overskrift; } else { echo "der er ikke noget"; } [/code]
Jeg har godt set dit spørgsmål på stackoverflow - det der undrer mig er at du ikke har formået at løse problemet endnu. Må jeg foreslå at du dropper Active Record metoden? Den er mere resourcekrævende - hvilket også står i dokumentationen - men også fordi der er ikke helt en rigtig Active Record implementering i CI.
Og ja, som #1 også nævner, så bruger du ikke $query rigtigt - du kan med fordel præsentere de relevante dele i din controller og dit view samt din model for at vi kan give et bud der giver mening.
$this->db->select('*,forum_traad.indhold as traad_indhold, forum_kommentare.indhold as kommentare_indhold, forum_traad.brugernavn as traad_brugernavn, forum_traad.id as traad_id '); $this->db->from('forum_traad','users'); $this->db->join('forum_kommentare', 'forum_kommentare.fk_forum_traad', 'forum_traad.id'); $this->db->where('forum_traad.id', $id);
$query = $this->db->get();
og det virker fint, men jeg mangler så at kunne udskrive "profil_billed" feltet som ligger i min users tabel.
og jeg har prøvet at print_r min query med det jeg har lavet nu, og der udskriver den
$sql = " SELECT forum_traad.indhold as traad_indhold, forum_kommentare.indhold as kommentare_indhold, forum_traad.brugernavn as traad_brugernavn, forum_traad.id as traad_id, users.profil_billed as billed FROM forum_traad, forum_kommentare, users WHERE forum_kommentare.fk_forum_traad = forum_traad.id AND forum_traad.brugernavn = users.profil_billed AND forum_traad.id = ? "; $query = $this->db->query($sql, array($id));
Men jeg vil stadig gerne se de relevante model funktioner, det view du bruger samt controlleren der viser dit view, for hvis jeg husker rigtigt fra SO, så gør du mange ting helt forkert...
Her fortæller du at users tabellen skal hente data frem når den finder et forum_traad.brugernavn der matcher users.profil_billed Med lidt sund fornuft vile jeg antage at du ikke navngiver din brugers navn med samme indhold som i brugerens profil_billed felt?
function posts($id) { $this->db->select('*,forum_traad.indhold as traad_indhold, forum_kommentare.indhold as kommentare_indhold, forum_traad.brugernavn as traad_brugernavn, forum_traad.id as traad_id '); $this->db->from('forum_traad','users'); $this->db->join('forum_kommentare', 'forum_kommentare.fk_forum_traad', 'forum_traad.id'); $this->db->where('forum_traad.id', $id);
repox, jeg har prøvet at lave det lidt om, sådan at nu viser den tråden og det, men mangler at kunne udskrive "profil_billed" feltet fra min users tabel, tror du at du kan hjælpe mig med det
#12 Jeg har nu sat et standard CI miljø op og bare puttet din model, controller og view ind for at løbe dit problem igennem; og umiddelbart virker det fint herfra, når man bare husker at rette den til $this->db->join('users', 'forum_traad.brugernavn = users.username', 'left');. At din løsning så ikke er videre elegant er en helt anden sag. At du ikke kan få det til at virke, forstår jeg så ikke.
#13 når jeg så prøver at echo $query->profil_billed; i min view så udskriver den ingenting, og er sikker på at der er noget i mit profil_billed felt i database tabellen, det lidt det problem jeg har
Som sagt, så fungerer det ganske fint hos mig med den lille ændring som jeg nævnte før. Det er svært at løse et problem som ikke kan reproduceres. Mit bedste bud er at forum_traad.brugernavn ikke stemmer overens med users.brugernavn - kontroller at begge felter indeholder nøjagtigt det samme...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.