Autor Zpráva
Flek
Profil
Dobrý den,

mám následující dvě tabulky:

awards (Tabulka vytvořených ocenění) -> id, name, icon_name
u_awards (Tabulka zaznamenávající uživatele kteří ocenění získali) -> id, award_id, user_id, description

===================================

Tabulky z databáze vytahuju pomocí DIBI klasickým způsobem.

Mám tedy dvě proměnné pojmenované podle tabulek naplněné 'awards' a 'u_awards'.



A já teď nemůžu pořádně zkloubit funkci, která mi bude vracet čisté html s obrázkem (tagem img).

======================

Zde je to co jsem napatlal, ale vrací mi to 4 stejné ikonky i když je v databázi u uživatele uložena pouze jedna.

        function getUserAwards($user_id)
        {
                return $this->db->select('*')
                                ->from('u_awards')
                                ->where('u_id = %i', $user_id)
                                ->fetch();        
        }
        
        
        function getAward()
        {
                return $this->db->select('*')
                                ->from('awards')
                                //->where('id = %i', $award_id)
                                ->fetch();
        }
        
        function getUsersBadges($user_id)
        {
                //$badges = array();
                $user_awards = $this->getUserAwards($user_id);
                $award_data = $this->getAward();
                $badges = '';
                
                foreach ($user_awards as $award)
                {
                       $badges.= '<img src="/img/awards/'.$award_data[1]['icon_name'].'">';                
                }                        
                
                return $badges;
        }



Tak jsem to nakonec vyřešil.

        function getUserAwards($user_id)
        {
                return $this->db->select('*')
                                ->from('u_awards')
                                ->where('u_id = %i', $user_id)
                                ->fetchAll();        
        }
        
        
        function getAward($award_id)
        {
                return $this->db->select('*')
                                ->from('awards')
                                ->where('id = %i', $award_id)
                                ->fetch();
        }
        
        function getUsersBadges($user_id)
        {
                $users_awards = $this->getUserAwards($user_id);
                $data = '';
                
                foreach ($users_awards as $user_award)
                {
                        $award = $this->getAward($user_award['award_id']);
                        $data.= '<img src="/img/awards/'.$award['icon_name'].'" />';               
                }               
                return $data;
        }
Keeehi
Profil
Flek:
Lepší by bylo to spojení uživatel - odznaky nechat udělat už databázi:

function getUsersBadges($user_id)
{
    $db_data = $this->db->select('*')
        ->from('u_awards')
        ->leftJoin('awards')->on('u_awards.award_id = awards.id')
        ->where('u_awards.user_id = %i', $user_id);

    $data = '';
                
    foreach ($db_data as $row)
    {
        $data.= '<img src="/img/awards/'.$row['icon_name'].'" />';               
    }               
    
    return $data;
}

Netestováno. Pravděpodobně bude potřeba správně pojmenovat názvy sloupců a zjistit si, co přesně obsahuje proměnná $row.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: