Question

je suis en train de penser à ce sujet depuis des jours maintenant et ne venez pas en saisit (depuis que je suis relativley nouvelle pour MVC et IC).Je ne suis même pas sûr de savoir si c'est un problème avec MVC, MySQL ou de tableaux.

Situation:2 tables MySQL

  1. Table données:id, titre, liste
  2. Table les valeurs:id, nom

L'interrogation de la données résultats de la table dans un tableau comme le suivant (extrait):

[4] => Array
        (
            [id] => 3
            [title] => Foo                
            [list] => 1,2,3,4,6,14
        )

[5] => Array
        (
            [id] => 4
            [title] => Bar                
            [list] => 2,6,9,12
        )

Le domaine liste contient des valeurs séparées par des virgules qui correspondent à certains Identifiants de l' les valeurs table comme

[3] => Array
            (
                [id] => 12
                [name] => 'value12'                
            )

Ce que j'essaie de faire pour chaque ligne:

  • prendre la liste-des valeurs et de l'exploser dans un tableau
  • vérifiez auprès de l'ensemble de résultats de l' les valeurs-table (via in_array() la méthode)
  • retour au nom des valeurs de l'Id si l'
  • inclure il en quelque sorte dans l'ensemble de résultats (par ex.comme un tableau en 2 dimensions):

    [5] => Array ( [id] => 4 [titre] => la Barre de [list] => Array ( [0] => value6 [1] => value12 ...) )

Mon approche naïve jusqu'à présent a été de

  • exécuter une requête sur chacun des 2 tableaux
  • comparez les 2 ensembles de résultats via in_array

Mon principal problème (tout en essayant de séparer strictement le modèle, le contrôleur et la vue):Comment puis-je inclure le nom de domaine à partir des valeurs de table dans la "boucle principale" de l' données table de jeu de résultats?

if($q->num_rows() > 0)
{
    $data[] = $q->result_array();
    foreach ($q->result() as $row)
    {
        $data[] = $row;
    }
    return $data;
}

Si j'utilise la suite (lourd) approche que j'ai naturellement obtenir un nouvel élément à chaque fois:

foreach ($q->result_array() as $row) 
{
    $data[]['id'] = $row['id'];
    $data[]['title'] = $row['title'];
    $data[]['list'] = $row['year'];
}

Puisque c'est une base de données MySQL, je ne vois aucune façon de faire exploser et de la comparaison en SQL (avec ou quelque chose d'autre).

Tout soupçon, même un simple lien vers une info peu, il est très apprécié.

Grâce à un billion de!

fab

Était-ce utile?

La solution

Il y a un plusieurs-à-plusieurs relations entre les listes et les valeurs de la liste.La façon conventionnelle de ce modèle dans une base de données relationnelle est de créer une adhésion de la table.Donc, je vous la structure de votre schéma de ce genre.

lists : list_id, title
values : value_id, name
list_values : list_id, value_id

list_values est le de rejoindre la table.Il liens des listes de valeurs.

Pour construire une liste, on pourrait avoir les fonctions suivantes dans votre modèle

function build_list($list_id)
{
    $list = $this->get_list($list_id);
    $list->values = $this->get_list_values($list_id);
    return $list;
}

function get_list($list_id)
{
    $sql = 'select * from lists where list_id=?';
    return $this->db->query($sql, array($list_id))->row();
}

function get_list_values($list_id)
{
    $sql = 'select v.value_id, v.name
        from list_values lv
        join values v on v.value_id=lv.value_id
        where lv.list_id=?';
    return $this->db->query($sql, array($list_id))->result();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top