Tri d'un tableau résultant de 2 requetes SQL (Codeigniter) [Résolu]

lsamsoumal 36 Messages postés lundi 24 novembre 2008Date d'inscription 27 octobre 2011 Dernière intervention - 2 oct. 2011 à 12:48 - Dernière réponse : lsamsoumal 36 Messages postés lundi 24 novembre 2008Date d'inscription 27 octobre 2011 Dernière intervention
- 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.
Afficher la suite 

2 réponses

Répondre au sujet
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 3 oct. 2011 à 01:45
+3
Utile
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;
}
?>
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de TychoBrahe
lsamsoumal 36 Messages postés lundi 24 novembre 2008Date d'inscription 27 octobre 2011 Dernière intervention - 4 oct. 2011 à 11:27
0
Utile
Merci bien TychoBrahe votre réponce m'a bien aidé à avoir le résultat attendu
Merci une autre fois :)
Commenter la réponse de lsamsoumal

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.