Requete sur le résultat d'une requete
Résolu
AzRaElDGT
Messages postés
57
Date d'inscription
Statut
Membre
Dernière intervention
-
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Peut on faire une requête sur le résultat d'une requête?
Par exemple ma 1er requête:
Puis sur le resultat de cette requete:
Bon j'imagine que ça ne s'écrit pas comme ça, mais comment puis je faire?
Az
Peut on faire une requête sur le résultat d'une requête?
Par exemple ma 1er requête:
$requete = 'SELECT * FROM site_resa WHERE \''.$date1.'\' BETWEEN date1 AND date2';
Puis sur le resultat de cette requete:
$requete = 'SELECT * FROM site_resa WHERE baniere = "on" OR moteur = "on" OR aquereur = "on"';
Bon j'imagine que ça ne s'écrit pas comme ça, mais comment puis je faire?
Az
A voir également:
- Requete sur le résultat d'une requete
- Resultat foot - Télécharger - Vie quotidienne
- Lexer resultat - Télécharger - Sport
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Erreur de requete facebook - Forum Facebook
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
8 réponses
désolé je suis HS mais comment avez vous appris à programmer ? J'aimerais apprendre. Avez vous des conseils à me donner ? Des livres sitees etc ?
Ce n'est pas la réponse que vous attendiez je suppose...
Ce n'est pas la réponse que vous attendiez je suppose...
Bonsoir,
Je te réponds un peu au "feeling" car je connais SQL/DB2 uniquement, mais le relationnel .............. Essaie quelque chose comme cela :
$requete = 'SELECT *
FROM site_resa
WHERE ( \''.$date1.'\' BETWEEN date1 AND date2')
AND ( baniere = "on" OR moteur = "on" OR aquereur = "on"');
J'ai mis des parenthèses pour encapsuler les conditions, j'ignore si c'est le bon symbole
Je te réponds un peu au "feeling" car je connais SQL/DB2 uniquement, mais le relationnel .............. Essaie quelque chose comme cela :
$requete = 'SELECT *
FROM site_resa
WHERE ( \''.$date1.'\' BETWEEN date1 AND date2')
AND ( baniere = "on" OR moteur = "on" OR aquereur = "on"');
J'ai mis des parenthèses pour encapsuler les conditions, j'ignore si c'est le bon symbole
Merci de ton aide mais j'ai fini par trouver:
$requete1 = 'SELECT *
FROM site_resa
WHERE \''.$date1.'\' BETWEEN date1 AND date2
AND EXISTS (SELECT *
FROM site_resa
WHERE baniere = "on"
OR moteur = "on"
OR aquereur = "on")';
En faite j'avais la solution mais j'avais aussi un problème dans ma boucle
Code complet:
Merci
Az
$requete1 = 'SELECT *
FROM site_resa
WHERE \''.$date1.'\' BETWEEN date1 AND date2
AND EXISTS (SELECT *
FROM site_resa
WHERE baniere = "on"
OR moteur = "on"
OR aquereur = "on")';
En faite j'avais la solution mais j'avais aussi un problème dans ma boucle
Code complet:
function date_fr_to_mysql($str) {return preg_replace( '/([0-9]{2}).?([0-9]{2}).?([0-9]{4})/', '\\3-\\2-\\1', $str);} $date_deb = $_POST['date1']; $date_fin = $_POST['date2']; $chk_ban = $_POST['baniere']; $chk_mot = $_POST['moteur']; $chk_aqu = $_POST['aquereur']; $date = date_fr_to_mysql($date_deb); $date2 = date_fr_to_mysql($date_fin); $date1 = $date; $erreur = ""; //boucle sur le nobre de jours entre Date1 et Date2 while($date1<=$date2) { //Ecriture de la requete $requete1 = 'SELECT * FROM site_resa WHERE \''.$date1.'\' BETWEEN date1 AND date2 AND EXISTS (SELECT * FROM site_resa WHERE baniere = "on" OR moteur = "on" OR aquereur = "on")'; //Envois de la requete $requete = mysql_query($requete1)or die('Erreur SQL !<br>'.$requete1.'<br>'.mysql_error()); while ($data=mysql_fetch_array($requete)) {$baniere = $data[7]; $moteur = $data[8]; $aquereur = $data[9]; } //Découpage de la date $chaine = $date1; $date_deb_exp = explode ("-", $chaine); $jour = $date_deb_exp[2]; $mois = $date_deb_exp[1]; $annee = $date_deb_exp[0]; //Ajoute 1 jour $jour = $jour+1; //Formatage du nouveau jours sur 2 chiffres if ($jour<=9) $jour = "0".$jour; //formatage de la nouvelle date $date1 = $annee."-".$mois."-".$jour; //Si Date1 et Date2 ont le meme critére sur "on" on sort de la boucle, sinon on controle le jour suivant jusqu'a date2. If (($chk_ban == "on")&&($baniere == "on")) {$erreur = $date1."baniere"; break;} If (($chk_mot == "on")&&($moteur == "on")) {$erreur = $date1."moteur"; break;} If (($chk_aqu == "on")&&($aquereur == "on")) {$erreur = $date1."aquereur"; break;} }
Merci
Az
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Je t'ai posé cette question car de mon côté j'ai fait un test (SQL/DB2) et le résultat obtenu ne semble pas cadrer avec l'énoncé formulé (une requête sur le résultat d'une requête).
En effet chez moi, le second SELECT explore toute la table pour rechercher les lignes satisfaisant aux conditions formalisées dans le 2em prédicat et ce, indépendamment de la condition (1er prédicat) formalisé dans le premier SELECT.
Si ce n'est déjà fait et si ma remarque t'interpelle, essaie de faire un jeu d'essais, avec la table concernée constituée de plusieurs lignes dont une (ligne au moins) qui satisfait aux conditions du 2em prédicat mais qui se trouve en dehors de la plage de sélection du 1er prédicat.
Je me trompe peut-être, encore une fois c'est du relationnel mais il peut exister des différences.
Je ne le pense pas, mais dans le doute je préfère d'en informer.
Je t'ai posé cette question car de mon côté j'ai fait un test (SQL/DB2) et le résultat obtenu ne semble pas cadrer avec l'énoncé formulé (une requête sur le résultat d'une requête).
En effet chez moi, le second SELECT explore toute la table pour rechercher les lignes satisfaisant aux conditions formalisées dans le 2em prédicat et ce, indépendamment de la condition (1er prédicat) formalisé dans le premier SELECT.
Si ce n'est déjà fait et si ma remarque t'interpelle, essaie de faire un jeu d'essais, avec la table concernée constituée de plusieurs lignes dont une (ligne au moins) qui satisfait aux conditions du 2em prédicat mais qui se trouve en dehors de la plage de sélection du 1er prédicat.
Je me trompe peut-être, encore une fois c'est du relationnel mais il peut exister des différences.
Je ne le pense pas, mais dans le doute je préfère d'en informer.
Je travail avec MySQL 4.1.9, j'ai lancé toute une série de test avec toute les conditions possible (soit 27) je pas eu le moindre problème...
Mais lors de mes recherches il semblerait que l'écriture des sous requêtes ai récemment changer avec MySQL.
Quand au résultat que je recherchais:
Dans l'ordre:
1 je sélectionne tous les champs de la table "site_resa"
2 je recherche tous les enregistrements dont "site_resa" est compris entre date1 et date2.
3 Parmi tous les enregistrement restant je recherche tous ceux qui ont baniere ou moteur ou aquereur sur "on".
Les parties 1 et 2 représente pour moi une 1er requête, la partie 3 une desième requête soit une sous-requête.
Toute fois y a dans mon code une petite erreur mais qui n'a rien a voir avec ça, c'est juste pour sortir de la boucle.
Voila tous ce que je peux te dire.
Az
Mais lors de mes recherches il semblerait que l'écriture des sous requêtes ai récemment changer avec MySQL.
Quand au résultat que je recherchais:
SELECT * FROM site_resa WHERE \''.site_resa.'\' BETWEEN date1 AND date2 AND EXISTS (SELECT * FROM site_resa WHERE baniere = "on" OR moteur = "on" OR aquereur = "on")
Dans l'ordre:
1 je sélectionne tous les champs de la table "site_resa"
2 je recherche tous les enregistrements dont "site_resa" est compris entre date1 et date2.
3 Parmi tous les enregistrement restant je recherche tous ceux qui ont baniere ou moteur ou aquereur sur "on".
Les parties 1 et 2 représente pour moi une 1er requête, la partie 3 une desième requête soit une sous-requête.
Toute fois y a dans mon code une petite erreur mais qui n'a rien a voir avec ça, c'est juste pour sortir de la boucle.
Voila tous ce que je peux te dire.
Az