Requete sur le résultat d'une requete
Résolu/Fermé
AzRaElDGT
Messages postés
57
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2008
-
9 mars 2008 à 20:11
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 10 mars 2008 à 22:20
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 10 mars 2008 à 22:20
A voir également:
- Requete sur le résultat d'une requete
- Requete http - Guide
- Requête bloquée par le firewall applicatif claranet webfence ✓ - Forum Internet / Réseaux sociaux
- Afficher resultat requete sql php ✓ - Forum PHP
- Requete excel ✓ - Forum Excel
- Requete sql commence par ✓ - Forum Webmastering
8 réponses
TankilyoraDbug
Messages postés
979
Date d'inscription
mardi 15 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2011
219
9 mars 2008 à 20:19
9 mars 2008 à 20:19
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...
AzRaElDGT
Messages postés
57
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2008
2
9 mars 2008 à 21:31
9 mars 2008 à 21:31
En effet, rien a voir avec ma question...
Tu aurais pu créer un nouveau sujet pour ça ...
Az
Tu aurais pu créer un nouveau sujet pour ça ...
Az
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
130
9 mars 2008 à 22:52
9 mars 2008 à 22:52
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
AzRaElDGT
Messages postés
57
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2008
2
9 mars 2008 à 23:30
9 mars 2008 à 23:30
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
AzRaElDGT
Messages postés
57
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2008
2
9 mars 2008 à 23:31
9 mars 2008 à 23:31
Résolu
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
130
10 mars 2008 à 01:08
10 mars 2008 à 01:08
Pour mon information personnelle, peux-tu me dire si tu obtiens le résultat atttendu avec cette requête ?
AzRaElDGT
Messages postés
57
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2008
2
10 mars 2008 à 08:14
10 mars 2008 à 08:14
Apparament oui ;)
Az
Az
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
130
10 mars 2008 à 14:17
10 mars 2008 à 14:17
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.
AzRaElDGT
Messages postés
57
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2008
2
10 mars 2008 à 21:43
10 mars 2008 à 21:43
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
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
130
10 mars 2008 à 22:20
10 mars 2008 à 22:20
D'accord, énoncé comme cela (points 1, 2 et surtout le 3).
Ce n'était pas ce que j'avais compris.
Ce n'était pas ce que j'avais compris.