27-08-2010, 11:43 PM
(Modification du message : 30-08-2010, 10:14 PM par Sephi-Chan.)
Bonjour à tous,
Je me permets de demander de l'aide car je suis confronté à un problème que je n'arrive pas à corriger et ce depuis un mois. Je dois avoir codé quelque chose d'affreux mais malgré tout je n'identifie pas l'origine du problème.
Synthèse :
- Application développée en PHP 5 / mysql à l'aide de Code Igniter.
Le problème survient dans mon modèle "knowledge_model"
Je me permets de demander de l'aide car je suis confronté à un problème que je n'arrive pas à corriger et ce depuis un mois. Je dois avoir codé quelque chose d'affreux mais malgré tout je n'identifie pas l'origine du problème.
Synthèse :
- Application développée en PHP 5 / mysql à l'aide de Code Igniter.
Le problème survient dans mon modèle "knowledge_model"
Code PHP :
<?php
function Get_available_knowledges()
{
// On va chercher les savoirs disponibles.
// Les savoirs disponibles répondent a toutes les conditions de liaison et de descendance des autres savoirs
// Il faut d'abord récupérer tous les savoirs détenus par un country
$this->db->where('id_country', $this->session->userdata('current_view_fief'));
$owned_knowledges = $this->db->get('utg_country_knowledge');
// Nous avons un objet $query qui contient tous les id de knowledges connus.
// On va chercher tous les knowledges qui dépendent des knowledges possédés
// Pour l'instant, les knowledges ne peuvent être débloqués que par d'autres knowledges et rien d'autre type_parent = 1.
$count = 0; // On met le compteur a 1 pour préparer le array.
$available;
foreach($owned_knowledges->result() as $row)
{
$count ++;
$this->db->where('id_knowledge_parent', $row->id_knowledge);
$this->db->where('type_parent', 1);
$this->db->select('id_knowledge_child');
$result = $this->db->get('utg_knowledge_links');
$potential_knowledges[$count] = $result->row();
$potential_knowledges[0] = $count;
}
// On a récupéré le tableau $potential_knowledges qui contient des objets id_knowledge_child
// On va créer un tableau avec tous les knowledges child et le comparer au tableau des knowledges possédés.
$count = 0; // On réinitialise le compteur
while($count < $potential_knowledges[0])
{
$count++;
$this->db->where('id_knowledge_child', $potential_knowledges[$count]->id_knowledge_child);
$this->db->where('type_parent', 1);
$this->db->select('id_knowledge_parent');
$child_knowledges = $this->db->get('utg_knowledge_links');
$available_knowledge[$count] = 0;
foreach($child_knowledges->result() as $row)
{
//$available_knowledge[$count] = 1;
if(in_array($row->id_knowledge_parent, $owned_knowledges->row_array()) != FALSE && $available_knowledge[$count] < 2 )
{
$available_knowledge[$count] = 1;
}
else
{
$available_knowledge[$count] = 2;
}
}
$available_knowledge[0] = $count;
}
// On a tous les id de knowledges pouvant être recherchés
// Il faut a présent les récupérer en détail et classés par famille
$count = 1;
if(isset($available_knowledge) && $available_knowledge[0] !=0)
{
while($count < $available_knowledge[0])
{
if($available_knowledge[$count] = 1)
{
$this->db->where('id', $available_knowledge[$count]);
}
}
$this->db->where('active',1);
$this->db->order_by('family');
$final_result = $this->db->get('utg_knowledge');
return $final_result;
}
return FALSE;
}
Voici le principe :
- Je suis un seigneur owner d'un "country".
- Je cherche à ressortir tous les "savoirs" ( recherche ) pouvant être recherchés à l'heure actuelle, les autres n'apparaissent pas.
- Un savoir est "débloqué" lorsque le "country" possède déjà tous les savoirs dont le savoir débloqué est dépendant. ( table de liaison utg_knowledge_links )
Mais voilà, avec ce que je fais, je n'arrive pas à obtenir ce résultat. Il me sort TOUS les savoirs que je n'ai pas et parfois même les savoirs que je détiens déjà...
Si quelqu'un pouvait m'aider à identifier le problème, ce serait vraiment sympa. Je peux décrire les tables de bdd à la demande mais les informations de champ sont déjà dans le code normalement.
Merci d'avance