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 -
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
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
A voir également:
- Requête SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
16 réponses
Salut.
Je vois bien une solution en php, qui se déroulerait comme ceci:
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.
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.
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 !
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 !
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il me retourne l'erreur suivante :
"Incorrect parameter count in the call to native function 'ISNULL'"
:(
"Incorrect parameter count in the call to native function 'ISNULL'"
:(
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 :(
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 :(
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 ...
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 ...
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 !!
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.
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.
$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";
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";
$nb=mysql_numrows($rep)
C pas la meme chose ça ????
Ensuite tu vérifie si c supérieur à 0 !!! C tout !!
Pff..
C pas la meme chose ça ????
Ensuite tu vérifie si c supérieur à 0 !!! C tout !!
Pff..
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 :)
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 :)
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.
Pour que le début de mot + % marche, je pense qu'il suffit de remplacer le = par LIKE dans la clause WHERE.