Requêtes dynamiques réunies par UNION est ce possible ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requêtes dynamiques réunies par UNION est ce possible ?

par Anh » 26 sept. 2005, 17:38

Pour répondre à tous :

pour mère theresa, oui mon problème est résolu et mes affichages sont corrects.

pour répondre à sadeq, j'avais déjà fais tout ce que tu as mis, y'avait pas de soucis là dessus.

Comment met on le [résolu] ?
Merci.

Anh.

par mere-teresa » 23 sept. 2005, 09:26

$query1 = "select * from enseignement e,classes_associees ca where e.date ='".$date."'and ((e.nom_classe ='".$classe."') or(e.nom_classe = ca.nom_associe and ca.nom_classe ='".$classe."'))
or(nom_prof='".$nom."' and prenom_prof='".$prenom."')
and ((e.heure_debut >= '".$heure_debut."' and e.heure_fin <= '".$heure_fin."')
or (e.heure_debut <='".$heure_debut."' and e.heure_fin >'".$heure_debut."' and e.heure_fin < '".$heure_fin."')
or (e.heure_debut > '".$heure_debut."' and e.heure_fin >= '".$heure_fin."' and e.heure_debut < '".$heure_fin."')) order by e.heure_debut";

merci.

Anh.
Déjà : est-ce que ton problème est Résolu ?

Il vaut mieux que tu fasses echo $query1; afin d'avoir la vraie requête que le PHP a générée, et qui va être utilisée. Tu pourras ainsi la tester dans Eskuel ou PHPMyAdmin (ou équiv), et voir quels sont les résultats renvoyés.
Note : faut remplir un peu la base avant.

par sadeq » 22 sept. 2005, 18:20

J'ai du mal à comprendre ce que tu veux avec cette formulation:
Je voudrai rechercher pour une semaine donnée, les salles qui sont libres pour une classe A et une durée de cours donné.
Si t'as besoin de connaître les salles libres t'as pas besoin de te soucier de la classe A ou autres.
La seconde chose qui pose un problème de conception est l'association de deux classes qui n'est d'autres que la présence des deux classes en même temps dans une salle pour un même cours bien sûr. Pour moi il n'y a pas association mais simplement regroupement temporaire.
D'où, pour résoudre le problème, t'as besoin d'enregistrer les infosuivantes :
* Des classes A,B,C... distinctes
* Des salles avec leurs capacités d'accueil
* Des cours mesurés par des durées associés à des profs et regroupés par classe
* Et un calendrier (des dates découpées en tranches horaires)

En fin, l'objectif est d'enregistrer le planning d'une classe (à concurence des autres) pour cela il faut enregistrer dans le cadre d'une association planning qui joint une classe, une salle, un cours et une ou plusieurs tranches d'une date (selon la durée du cours)
Pour placer un enregistrement correct dans l'association planning il faut respecter des règles comme :
1° ne pas placer 2 fois le même cours pour une classe
2° ne pas placer 2 fois la même classe dans une salle et horaire
..etc..

Exemple:

Table Planning
-----------------
A, C1, S1, 22/09/05, 08,12
B, C2, S2, 22/09/05,08,12
C, C2, S2, 22/09/05,08,12

On ne peut pas ajouter l'enregistrement "A, C1, S3, 23/09/05,08,12" car le cours C1 est déjà planifié pour la classe A

On ne peut pas ajouter l'enregistrement "A, C2, S1, 22/09/05,08,12" car la salle S1 est déjà prise par la même classe.

Ainsi de suite, les règles peuvent être vérifiées par des triggers (requêtes) avant d'autoriser un enregistrement.

par Anh » 22 sept. 2005, 16:54

J'ai résolu mon problème ! pjl , tu avais raison j'ai bosser ma requête et du coup tout est devenu plus clair.(des fois vaut mieux aller se changer les idées !!!)
voilà ce que j'ai écris:

$query1 = "select * from enseignement e,classes_associees ca where e.date ='".$date."'and ((e.nom_classe ='".$classe."') or(e.nom_classe = ca.nom_associe and ca.nom_classe ='".$classe."'))
or(nom_prof='".$nom."' and prenom_prof='".$prenom."')
and ((e.heure_debut >= '".$heure_debut."' and e.heure_fin <= '".$heure_fin."')
or (e.heure_debut <='".$heure_debut."' and e.heure_fin >'".$heure_debut."' and e.heure_fin < '".$heure_fin."')
or (e.heure_debut > '".$heure_debut."' and e.heure_fin >= '".$heure_fin."' and e.heure_debut < '".$heure_fin."')) order by e.heure_debut";

merci.

Anh.

par pjl » 22 sept. 2005, 15:04

pour le moment, tu n'as pas à toucher au PHP mais simplement travailler sur la requête.
Quand elle sera au point, tu pourra la traiter en PHP.
Qu'est ce que le mcd ? :((
4eme résultat avec :google:

par Anh » 22 sept. 2005, 14:20

en fait voilà ce que j'aimerai faire : (mon code est totalement faux mais je l'ai écris ainsi pour vous faire comprendre mon idée )

// je voudrai générer des requêtes dynamiquement , je parcours mon tableau de nom classe et tant qu'il ya dse noms je veux qu'il cherche l'occupation des salles et qu'il uni toutes les requêtes en une seule

// je voudrai mettre une boucle for dans ma query (pour pouvoir extraire chaque tabNom[$i])

// ce que j'ai fait à la fin du query c'est pour l'ajout de "union" ou d'un point virgule si c'est le dernier élément du tableau.

$query1 =

for($i=0;$i<sizeof($tabNom[]);$i++){

"(select * from enseignement where date ='".$date_j3."'and nom_classe ='".$tabNom[$i]."'
and ((heure_debut >= '".$heure_debut."' and heure_fin <= '".$heure_fin."')
or (heure_debut <='".$heure_debut."' and heure_fin >'".$heure_debut."' and heure_fin < '".$heure_fin."')
or (heure_debut > '".$heure_debut."' and heure_fin >= '".$heure_fin."' and heure_debut < '".$heure_fin."')) order by heure_debut)".(if ($i<sizeof($tabNom[])){'union'} else {;})
}

$result1 = mysql_query($query1,$connection);

par Anh » 22 sept. 2005, 14:08

Qu'est ce que le mcd ? :((

par pjl » 22 sept. 2005, 11:49

normalement, une seule requete devrait sufire mas pas évident de répondre.
il faudrait voir ton mcd.

Requêtes dynamiques réunies par UNION est ce possible ?

par Anh » 22 sept. 2005, 11:35

Bonjour,

voici mon problème:
Je suis en train de faire un gestionnaire de planning scolaire.
Je voudrai rechercher pour une semaine donnée, les salles qui sont libres pour une classe A et une durée de cours donné.
Pour ma recherche je verifie si la classe A a cours...pour cela pas de problème.
Mais ce qui pose problème c'est que cette classe A peut être fusionnée avec une autre classe B pour un cours, dans ce cas cette association porte un nom spécifique.Donc on doit également rechercher si la classe fusionnée AB a cours.

Pour ma recherche :
Je fais d'abord une requête pour rechercher si la classe est fusionnée avec d'autres classes, si oui je stocke tous les noms d'association dans un tableau TAB[].
Ensuite je vais rechercher par exemple si cette classe a cours le lundi et dans ce cas récupérer les horaires de début de cours et de fin de cours.
Pour cette recherche, je voudrais faire autant de requêtes qu'il y a de noms de classe dans le tableau TAB[]. Je voudrai également faire l'union de ces requêtes puisque je désire récupérer les horaires de cours de cette classe lorsqu'elle est fusionnée ou lorsqu'elle ne l'est pas.

Est ce que cela est possible ? car je ne vois pas comment faire des requêtes et les joindre par un UNION de manière dynamique.

Merci de vos réponses !!

Anh.