Associer plusieurs SELECT dans une table SQL

gexevo
Invité n'ayant pas de compte PHPfrance

26 août 2010, 00:53

Salut,

Ça fait trois jours que j'essaie différente combinaison SQL pour mener à bien ma requête mais là j'ai vraiment besoin de poster.

Je vous explique, la requête repose sur un site d'annonces.

Dans le FORM j'ai plusieurs conditions :

* Mot clef (<input type="text">)
* La région (<select>)
* Année Mini (<select>)
* Année Max (<select>)
* Prix Mini (<select>)
* Prix Max (<select>)
et le SUBMIT.

Comment associer les résultats et me ressortir ceux qui ont des cohérences tout en sachant qu'un champ du FORM peut rester vide.

Les résultats sont dans une seule table.

Merci de partager vos idées, je compte sur vous.

A+

ViPHP
ViPHP | 4039 Messages

26 août 2010, 09:06

Récuperer les résultats avec php, insérer les conditions au fur et à mesure dans un tableau, qu'on transforme en chaine ( implode() ) à la fin, pour insérer dans le "where".

Ceci dit, j'ai a peu près compris ce que tu as voulu dire, et sans doute qu'avec un peu de code, ça passeras mieux. :wink:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 août 2010, 11:08

Des exemples de ce que dit Berzemus ici: vos-contributions/requete-sql-dynamique ... eux#p24961 (dont le coup du tableau)

gexevo
Invité n'ayant pas de compte PHPfrance

26 août 2010, 11:27

Salut Berzemus,

Pour ce qui est de la récupérations des résultats, ça c'est bon pas de problème.

Voilà un petit extract de ma table 'annonces' qui comporte tous les résultats à rechercher.

Image

Prenons un petit exemple :

Je voudrais par exemple ressortir toutes les annonces qui se trouvent en "AUVERGNE" ayant comme mot clef dans le titre "GSXR".

J'avais commencé par un
"SELECT count(*) FROM annonces WHERE titre LIKE '%$mot-cle% and region='$region''";

mais le problème c'est qu'il n'associe pas les résultats.

gexevo
Invité n'ayant pas de compte PHPfrance

26 août 2010, 11:30

Salut Berzemus,

Pour ce qui est de la récupérations des résultats, ça c'est bon pas de problème.

Voilà un petit extract de ma table 'annonces' qui comporte tous les résultats à rechercher.

Image

Prenons un petit exemple :

Je voudrais par exemple ressortir toutes les annonces qui se trouvent en "AUVERGNE" ayant comme mot clef dans le titre "GSXR".

J'avais commencé par un
"SELECT count(*) FROM annonces WHERE titre LIKE '%$mot-cle% and region='$region''";

mais le problème c'est qu'il n'associe pas les résultats.

gexevo
Invité n'ayant pas de compte PHPfrance

26 août 2010, 11:34

Salut Berzemus,

Pour ce qui est de la récupérations des résultats, ça c'est bon pas de problème.

Voilà un petit extract de ma table 'annonces' qui comporte tous les résultats à rechercher.

Voilà le lien vers l'image !!!! http://www.gexevo.fr/extract_sql.JPG

Prenons un petit exemple :

Je voudrais par exemple ressortir toutes les annonces qui se trouvent en "AUVERGNE" ayant comme mot clef dans le titre "GSXR".

J'avais commencé par un
"SELECT count(*) FROM annonces WHERE titre LIKE '%$mot-cle% and region='$region''";

mais le problème c'est qu'il n'associe pas les résultats.

gexevo1
Invité n'ayant pas de compte PHPfrance

26 août 2010, 18:02

C'est bon j'ai enfin trouvé.
Voici le code pour ceux qui pourrait être intéressé.

Merci ouckileou, ce lien m'a bien éclairé !!!!
  $requete2 = "SELECT * FROM annonces WHERE 1=1 ";
if (empty($mot_cle) and empty($region) and empty($annee_mini) and empty($annee_maxi) and empty($prix_mini) and empty($prix_maxi)) {
  $requete2 = "SELECT * FROM annonces";} 
else {
  if (!empty($mot_cle)) {
    $requete2 .= " AND titre LIKE '%$mot_cle%'";}
  if (!empty($region)) {
    $requete2 .= " AND region='$region'";}
  if (!empty($annee_mini)) {
    $requete2 .= " AND annee >='$annee_mini'";}
  if (!empty($annee_maxi)) {
    $requete2 .= " AND annee <='$annee_maxi'";}
  if (!empty($prix_mini)) {
    $requete2 .= " AND prix >='$prix_mini'";}
  if (!empty($prix_maxi)) {
    $requete2 .= " AND prix <='$prix_maxi'";}
    
   $requete2 .= " ORDER BY id DESC LIMIT $Ndeb,$Nmax";   
  }