Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/08/2011, 09h11   #1
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Par défaut mettre en place une recherche par rémunération sous forme d'intervalle

Bonjour,
je développe un moteur de recherche multi critère, ce dernier marche très bien sauf pour le dernier critère qui est la fourchette de rémunération qui consiste à taper un intervale de rémunératin ( pour la recherche d'offre : je développe un module de recrutement) ma requête est comme suit:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
function getResultSearch($langCode,$motscles, $domaine , $local,$contrat,$Remuneration){
			  $tmotscles = explode(" ",$motscles);
				  if($domaine != 0)
				  {
				    $where_domaine = " AND o.domaineId = '{$domaine}' ";
				  }
 
				  if($contrat != 0)
				  {
				    $where_contrat = " AND o.contratId = '{$contrat}' ";
				  }
 
				  if($local != 0)
				  {
				    $where_local = " AND o.localId = '{$local}' ";
				  }
				 if($Remuneration != 0)
				  {
				    $where_remuneration = " AND (o.offreRemunerationMin <= '{$Remuneration}' ";
				  }
				$sc = "
			    	SELECT 	{$this->alias}.offreId, 
				      	 	{$this->alias}.offreTitre, 
				       		{$this->alias}.offreText, 
				       		{$this->alias}.langCode, 
				       		{$this->alias}.offreMotsCles,
				       		o.contratId,
				       		o.localId,
				       		o.domaineId,
				       		o.offreActive, 
				       		o.offreRemunerationMin, 
				       		o.offreRemunerationMax,
					   		dt.domaineTitre,
					   		ct.contratTitre,
					   		lt.localTitre,
				       		o.offreDateModif 
			    	FROM {$this->table} {$this->alias} 
			    	INNER JOIN recrutement_offre o ON {$this->alias}.offreId = o.offreId 
				   	INNER JOIN recrutement_domaine_text dt 
				   		ON o.domaineId = dt.domaineId
				   		AND dt.langCode = '{$langCode}'
				   	INNER JOIN recrutement_contrat_text ct 
				   		ON o.contratId = ct.contratId
				   		AND ct.langCode = '{$langCode}'
				   	INNER JOIN recrutement_local_text lt   
				   		ON o.localId = lt.localId
				   		AND lt.langCode = '{$langCode}'
					LEFT JOIN thermidor_language l ON  {$this->alias}.langCode = l.langCode    
					WHERE {$this->alias}.langCode = '{$langCode}' 
					AND  o.`offreActive` = 1 
					{$where_domaine} 
					{$where_contrat} 
					{$where_local}
					{$where_remuneration}
					";
 
						if(is_array($tmotscles))
						{
						  	foreach ($tmotscles as $mc){
						   		$sc .= " AND {$this->alias}.offreMotsCles LIKE '%{$mc}%'";
						   	}
 
						  }
 
					$sc .= " GROUP BY {$this->alias}.`offreId` ";
 
				  if($rc = Database::execute_sql($sc))
				  {
				    return $this->parseResults($rc);
				  }
		}
en fait je compare que la valeur minimale de la rémunération, pour les autres critéres ça marche.
ce qui ne donne pas de bon résultats c le bout de code suivant:
Code :
1
2
3
4
5
 
 if($Remuneration != 0)
				  {
				    $where_remuneration = " AND (o.offreRemunerationMin <= '{$Remuneration}' ";
				  }
Merci d'avnce pour votre aide.
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h18   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Bonjour,
Dire que ça ne fonctionne pas ne suffit pas, il faudrait expliquer ce qui ne vas pas (résultat donnée, résultat attendu)
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h44   #3
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Ce qui va bien c'est que les 4 autres critères marchent bien, je veux dire la recherche marche, sauf pour la rémunération.
merci
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 10h17   #4
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Finalement, j'ai pu trouvé le problème, c'est qu'il fallait tester le type du paramètre , le bout de code à modifier est le suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 if(is_numeric($Remuneration))
				  { 
					  if($Remuneration != 0)
					  {
					    $where_remuneration = " AND (o.offreRemunerationMin >= {$Remuneration} ) ";
					  }
				  }
				  else{
				  $where_local = " AND o.offreRemunerationMin  LIKE '%{$Remuneration}%'";
				  }
donc voila .
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h46.


 
 
 
 
Partenaires

Hébergement Web