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

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

Votre réponse

2 réponses

Meilleure réponse
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
- 3 oct. 2011 à 01:45
3
Merci
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;
}
?>

Merci TychoBrahe 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de TychoBrahe
Messages postés
36
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
27 octobre 2011
- 4 oct. 2011 à 11:27
0
Merci
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.