Tri d'un tableau résultant de 2 requetes SQL (Codeigniter)

Résolu
lsamsoumal Messages postés 36 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 27 octobre 2011 - 2 oct. 2011 à 12:48
lsamsoumal Messages postés 36 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 27 octobre 2011 - 4 oct. 2011 à 11:27
Bonjour tout le monde
je voulais vous présenter mon problème en l'attente que quelqu'un puisse m'aider.Je sais que mon message est relativement long mais c'est pour que vous comprenez de quoi il s'agit exactement.
Dans ma base SQL j'ai 2 tables "post" et "job" dont les structures:
la table job:
`job_id` int(11) NOT NULL,
`job_parent` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
`job_description` text CHARACTER SET utf8,
`job_label` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
`job_insert_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`job_status` tinyint(1) DEFAULT NULL
et la table post:
`post_id` int(11) NOT NULL AUTO_INCREMENT,
`post_company` int(11) NOT NULL COMMENT ' ',
`post_responsable` int(11) NOT NULL,
`post_commercial` int(11) NOT NULL,
`post_job` int(11) NOT NULL,
`post_title` varchar(255) CHARACTER SET utf8 NOT NULL
KEY `post_job` (`post_job`)
Avec 'post_job' est une clé étrangère de la table job.

j'ai une fonction dans mon modèle 'jobDao'
public function getParent(){
$this->load->model("PostDao");
$job_list = array();
$query $this->db->query("SELECT * FROM job WHERE job_parent 0");
$result = $query->result();
foreach($result as $job){
$job->post_number = $this->PostDao->getNbPostJob($job->job_id);
$job_list[$job->job_id] = $job;
}
foreach($job_list as $job_id=>$post_number){
sort($job_list, $job_list[$post_number]);
}
return $job_list;
}

Et un autre dans le modèle postDao:
public function getNbPostJob($job = NULL){
$query "SELECT  post_id  FROM post WHERE post_job".$this->db->escape($job);
return $this->db->query($query)->num_rows;
}

La fonction dans le controller est la suivante
public function index(){
$this->load->model('PostDao');
$this->load->model('JobDao');
$list_job = $this->JobDao->getParent();
$data["list_job"] = $list_job;
$this->template->set_template('site');
$this->template->write_view('main', "site/home", $data);
$this->template->render();

}

lorsque je fait un "print_r($list_job);", le résultat affiché dans le navigateur est le suivant:
Array ( [0] => stdClass Object ( [job_id] => 1 [job_parent] => 0 [job_description] => [job_label] => Agro-Alimentaire [job_insert_time] => 2011-07-24 13:07:40 [job_status] => 1 [post_number] => 1 ) [1] => stdClass Object ( [job_id] => 14 [job_parent] => 0 [job_description] => [job_label] => Automobile [job_insert_time] => 2011-07-24 13:07:40 [job_status] => 1 [post_number] => 1 ) [2] => stdClass Object ( [job_id] => 19 [job_parent] => 0 [job_description] => [job_label] => Banque-Assurances-Immo [job_insert_time] => 2011-07-24 13:07:40 [job_status] => 1 [post_number] => 3 ) [3] => stdClass Object ( [job_id] => 57 [job_parent] => 0 [job_description] => [job_label] => Be-Methodes-Qualite [job_insert_time] => 2011-07-24 13:07:40 [job_status] => 1 [post_number] => 3 ))
Maintenant je veut trier ce résultat suivant la colonne 'post_number' et je n'ai pas trouvé l'astuce.

2 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 oct. 2011 à 01:45
Salut,

Tout d'abord désolé si je passe un peu à coté du problème, vu l'heure j'ai surtout survolé.

Donc, dans ta méthode getParent() tu utilsies mal la fonction sort(). Je t'invite à lire sa documentation. Si j'ai bien compris ce que tu veux faire, c'est trier le tableau associatif $job_list en fonction d'un des attributs des objets stockés. Ce genre de tri n'est implémenté en soit, pour y arriver il va te falloir effecteur un tri à l'aide d'une fonction de rappel. Pour ceci on utilise usort :
<?php
public function getParent(){
$this->load->model("PostDao");
$job_list = array();
$query $this->db->query("SELECT * FROM job WHERE job_parent 0");
$result = $query->result();
foreach($result as $job){
$job->post_number = $this->PostDao->getNbPostJob($job->job_id);
$job_list[$job->job_id] = $job;
}
usort($job_list, function($e1, $e2) { return $e1->post_number - $e2->post_number; });
return $job_list;
}
?>
3
lsamsoumal Messages postés 36 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 27 octobre 2011
4 oct. 2011 à 11:27
Merci bien TychoBrahe votre réponce m'a bien aidé à avoir le résultat attendu
Merci une autre fois :)
0
Rejoignez-nous