Requete SQL pour faire une recherche multi critères
Bonjour,
Je développe une application en php avec ZEND Framework, et j'aurai besoin de faire un moteur de recherche multi critères qui contiendra un champ texte pour saisir les mots clés et des listes déroulantes pour sélectionner en tenant compte du fait que le résultat peut s'afficher même si les autres choix ne sont pas fait.
je n'arrive pas à afficher un résultat avec la requête que j'ai fait.
j'aimerai un petit peu d'aide si quelqu'un peut bien le faire.
Merci d'avance.
Merci pour votre remarque
Après avoir retravailler la requête, finalement elle donne un bon résultat:
elle 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
|
public function getResultSearch($langCode,$motscles, $domaine , $local,$contrat){
$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}' ";
}
$sc = "
SELECT {$this->alias}.offreId,
{$this->alias}.offreTitre,
{$this->alias}.offreText,
{$this->alias}.langCode,
o.offreActive,
o.offreRemuneration,
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}
";
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);
}
} |