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

Anh
Invité n'ayant pas de compte PHPfrance

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.

ViPHP
pjl
ViPHP | 2119 Messages

22 sept. 2005, 11:49

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

Anh
Invité n'ayant pas de compte PHPfrance

22 sept. 2005, 14:08

Qu'est ce que le mcd ? :((

Anh
Invité n'ayant pas de compte PHPfrance

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);

ViPHP
pjl
ViPHP | 2119 Messages

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:

Anh
Invité n'ayant pas de compte PHPfrance

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.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

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.
Modifié en dernier par sadeq le 26 sept. 2005, 09:29, modifié 4 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Anh
Invité n'ayant pas de compte PHPfrance

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.