Requête SQL

Résolu
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -  
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


J'ai un formulaire avec 3 champs à remplir et un bouton submit.
Derrière, j'appel une autre page de mon site pour faire la requête et afficher les résultats.

Difficile à expliquer, j'avoue ...

En gros ma requête dit aujourd'hui :

SELECT * FROM table_test
WHERE champ_1 = STR_TO_DATE('".addslashes($monentree1surformulaire)."', '%d/%m/%Y')
AND champ_2 = ('".$monentree2surformulaire."')
AND champ_3 = ('".$monentree3surformulaire."')
ORDER BY champ_1

Hors dans le cas présent, si je ne renseigne qu'un champ sur les 3, je n'ai aucun résultat.
Il faut que je renseigne les 3 si je veux au moins 1 résultat !

Savez-vous comment monter ma requête pour que je puisse (par ex:) avoir 130 résultats si $monentree1surformulaire est le seul renseigné puis plus que 122 si $monentree2surformulaire est aussi renseigné et que 8 des 130 premiers résultats ne sont pas = à $monentree2surformulaire, etc etc pour $monentree3surformulaire .

Merci d'avance à vous.
A bientôt.

Boueep

16 réponses

freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   162
 
Salut.
Je vois bien une solution en php, qui se déroulerait comme ceci:
<?php
$requete="SELECT * FROM table_test";
if ( isset($monentree1surformulaire) && $monentree1surformulaire != ""){
    $requete=$requete."WHERE champ_1 = STR_TO_DATE('".addslashes($monentree1surformulaire)."', '%d/%m/%Y')";
    if (isset($monentree2surformulaire) && $monentree2surformulaire != ""){
        $requete=$requete."AND champ_2 = ('".$monentree2surformulaire."')";
        if (issetisset($monentree3surformulaire) && $monentree3surformulaire != ""){
            $requete=$requete."AND champ_3 = ('".$monentree3surformulaire."')";
        }
    }
}
$requete=$requete."ORDER BY champ_1";
//la suite des évennements
?>


Bon, cela suppose que si $monentree1surformulaire n'est pas renseignée, les autres ne le sont pas non plus.
Si ce n'est pas le cas, il faut adapter cette structure en ajoutant des conditions.
0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
Bonjour et merci :)

Dans ma démarche, n'importe quel champ peut être vide si au moins un autre est renseigné ...
La requête ci-dessus s'inscrit dans cette optique ?

D'après ce qui est précisé à la fin ... non ...
Enfin si j'ai bien comprit :D

Merci en tout cas !
0
seminoque Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne sais pas quel langage SQL tu utilises, mais si la fonction ISNULL existe je te propose l'astuce suivante :

SELECT * FROM table_test
WHERE champ_1 = ISNULL(STR_TO_DATE('".addslashes($monentree1surformulaire)."', '%d/%m/%Y'),champ_1)
AND champ_2 = ISNULL(('".$monentree2surformulaire."') ,champ_2)
AND champ_3 = ISNULL(('".$monentree3surformulaire."') ,champ_3)
ORDER BY champ_1
0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
Merci je vais essayer ça de suite et te tiens informé !
Je croise les doigts !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
Il me retourne l'erreur suivante :

"Incorrect parameter count in the call to native function 'ISNULL'"

:(
0
seminoque Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Quel SGBD utilises-tu ? Oracle ? MS SQL Server ? MySQL ?

D'après le message, il n'y a pas le bon nombre de paramètre dans la fonction ISNULL. L'exemple que je t'ai donné est en MS SQL Server et il y a bien les deux paramètres attendus.
0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
Je suis en MySQL
J'ai effectué des recherches .... en MySQL l'équivalent de ISNULL serait IFNULL.

J'ai donc essayé avec IFNULL.

Plus d'erreur SQL, mais pas de résultat lors de l'execution de ma requête :(
0
974_Vin's_974 Messages postés 547 Date d'inscription   Statut Membre Dernière intervention   102
 
essaye IS NULL ... Séparé ..

0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
ça ne marche pas ...
a priori c'est à choix "unique" IS NULL non ?
0
974_Vin's_974 Messages postés 547 Date d'inscription   Statut Membre Dernière intervention   102
 
Moi jte conseil de faire 3 requete diférentes comme ca :

SELECT * FROM table_test
WHERE champ_1 = ISNULL(STR_TO_DATE('".addslashes($monentree1surformulaire)."', '%d/%m/%Y'),champ_1)


SELECT * FROM table_test
WHEREchamp_2 = ISNULL(('".$monentree2surformulaire."') ,champ_2)


SELECT * FROM table_test
WHEREchamp_3 = ISNULL(('".$monentree3surformulaire."') ,champ_3)


Et ensuite, chak résultat tu les mets dans une variable, puis tu fé ta condition if ......

tu vérifie sy ya un ki é nul ou pas ...

0
toto
 
WHEREchamp_2 = ISNULL(('".$monentree2surformulaire."') ,champ_2)
encore désolé, mais encore du vraiment n'importe quoi
Je suis sûr que tu es de bonne foi, mais je suis aussi sûr de ta totale incompétence pour répondre à ce genre de question
0
974_Vin's_974 Messages postés 547 Date d'inscription   Statut Membre Dernière intervention   102
 
Pff té ferme ta gueule occupe toi d'tes affaires dont, je dis c'qui me plait et si t'as rien d'autre à faire , ben ché pas moi, va chercher une occupation !!

0
toto
 
Je comprends très bien que ma remarque ne te plaise pas. N'empêche qu'elle est est vraie.
Tu as le droit de dire ce qui te plaît, mais quand ce sont des erreurs, je me sens le devoir de le signaler à ceux qui posent des questions pour éviter qu'ils perdent leur temps en essais inutiles.
Et en matière d'erreur, ces derniers temps, tu es un multi récidiviste.
0
toto
 
$requete='';
if (!empty($monentree1surformulaire))
$requete.= "champ1=STR_TO_DATE('$monentree1surformulaire', '%d/%m/%Y')";

if (!empty($monentree2surformulaire))
$requete.= (strlen($requete)>0 ? " AND ":"")."champ2='".mysql_real_escape_string($monentree2surformulaire)."'";

if (!empty($monentree3surformulaire))
$requete.= (strlen($requete)>0 ? " AND ":"")."champ3='".mysql_real_escape_string($monentree3surformulaire)."'";

if (!empty($requete)) $requete = "SELECT * FROM table_test $requete ORDER BY champ_1";
0
974_Vin's_974 Messages postés 547 Date d'inscription   Statut Membre Dernière intervention   102
 
$nb=mysql_numrows($rep)


C pas la meme chose ça ????

Ensuite tu vérifie si c supérieur à 0 !!! C tout !!

Pff..

0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
Bonjour,

Tout d'abord, merci de votre aide.
Je ne m'interposerai pas dans vos échanges car nocive comme je suis, il m'est difficile de voir qui peut bien avoir tord ou raison.

Ce que je vois c'est que l'un comme l'autre vous avez prit le temps d'essayer de m'aider et pour cela, encore merci.

Toto :

Ta requête à l'air de fonctionner.
Je me suis permis d'y apporter une modification car avant cela ça ne marchait pas.
==> "SELECT * FROM table_test WHERE $requete ORDER BY champ_1";

Je vais garder cette version :)

Je me confronte néanmoins à un cas d'école ...

Dans mon "$monentree2surformulaire" j'ai voulu ne taper que le début du mot à rechercher + % mais ça n'a pas fonctionné.
C'est normal d'après vous ?

En tout cas je suis déjà très content du résultat :)
0
toto
 
Bien vu pour la correction. Effectivement, je fais rarement des tests complets avant de poster une réponse parce qu'il faudrait à chaque fois créer un formulaire et une table avec les champs particuliers de chaque cas.
Pour que le début de mot + % marche, je pense qu'il suffit de remplacer le = par LIKE dans la clause WHERE.
0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
La mention LIKE fonctionne en effet !
Bravo et Merci surtout ....

J'ai, par ailleurs, un autre besoin.

Pensez-vous que je puisse profiter de ce post puisqu'il s'agit, ici, encore d'une requête SQL ou est-il préférable que je fasse un nouveau Topic ?
0
toto
 
Un nouveau topic, sans aucun doute
0
Boueep Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   3
 
go alors :)

Merci encore pour votre aide !

Boueep
0