Tableau dynamique croisé ?

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 : Tableau dynamique croisé ?

par arkilon » 06 mars 2007, 16:23

Re Plop donc j'ai avancé quelque peu gràce à vos conseils :)

1. Modification de mes tables :

Medicament : identique
Ordonnance : ordo_num, nummedic(qui correspond au nom et pas au numero), idpat (Variable URL qui permet d'afficher les prescriptions du patient en dessous du formulaire de prescription), quantite
Patient : numpatient, nompatient, num_ordo (qui me sert a rien pour le moment)
ordonnance_patient : patient_num, ordo_num (Pour le moment je me ser pas de cette table puisque je comprend pas comment m en servir ?)

2. Ma requête SQL :

SELECT quantite, nompatient, nommedic, ordo_num
FROM medicament AS m, patient AS p, ordonnance AS o
WHERE p.numpatient = o.idpat AND o.nummedic = m.nommedic

La je pense quelle est bonne elle ressort les bonnes données et en plus ne m'affiche pas les patient qui n'on pas d'ordonnance.

3. Mes Pbs :

-Toujours mon souci je ne vois pas comment intégrer mes quantités dans le tableaux, sur la bonne ligne et surtout la bonne colonne ???

- Le patient peut avoir dans la même ordonnance plusieurs médicaments donc je pense qu il va falloir que je reprenne mes multi liste box (5 medic /patient au max) qu en pensez vous ?

Je pense également que le code de mon tableau n'est pas du tout bon, je vous remet la derniére version :

Code : Tout sélectionner

<p align="center"><font color="#339966"><B>Affichage du tableau de Chimio</B></font></p> <table border="1"> <td valign="bottom">Nom / Prénom du Patient</td> <td><div class="Style3" id="verticale">Numéro Ordonnance</div></td> <?php do { ?> <td><div id="verticale"><?php echo $row_aff_medic['nommedic']; ?></div></td> <?php } while ($row_aff_medic = mysql_fetch_assoc($aff_medic)); ?> <?php do { ?> <tr> <td valign="bottom"><?php echo $row_req_insertionordo['nompatient']; ?></td> <td><?php echo $row_req_insertionordo['ordo_num']; ?></td> <?php } while ($row_req_insertionordo = mysql_fetch_assoc($req_insertionordo)); ?> <tr> </tr> </table>
Voila merci encore pour vos réponses trés constructives et merci d'avance pour les futures réponses :)

J'ai uploadé la derniére version : http://arkidesign.ar.funpic.org/

par arkilon » 06 mars 2007, 12:37

J'avais juste oublié de me loguer et je ne peux donc éditer :(

Juste pour le site désolé pour les amoureux de Firefox (comme moi) il vau mieux utiliser IE qui permet d'avoir les noms de médicaments en vertical et dans ce sens de lecture.

EDIT : Lorsque vous faites une préscriptions, le N° d'ordonnance ne s'incrémente pas car j ai modifié la base et j'ai pas pris le temps de refaire l'injection des données et j'ai donc juste saisi en dur dans la base pour faire des tests.

Sinon cela marche sous Firefox mais c'est moin propre.

par Invité » 06 mars 2007, 12:34

Oki merci pour vos 2 réponses c'est génial je vais pouvoir tester tout ca !

JOINTURE voila le mot et la notion qui me manqué je vais me documenter dessus avant de retoucher au code pour tout bien comprendre.

J'ai par contre mis tout ca en ligne pour que vous puissiez vous rendre compte du truc, doncy à aucun design mais pour le moment ce n'est pas le but.

http://arkidesign.ar.funpic.org/index.php

Je vous laisses faire mumuse avec les patients & médicaments :)

par mere-teresa » 06 mars 2007, 12:09

En partant du principe, pour le moment, que chaque patient possède une seule ordonnance (mais sadeq n'a pas tort, réfléchis bien à tes données).



Ta requête sera de type (c'est le WHERE le plus impt) :

Code : Tout sélectionner

SELECT champ1, champ2, champ3 FROM Patient AS p, Medicament AS m, Ordonnance AS o WHERE p.Numordo = o.Numordo AND o.Nummedic = m.Nummedic
Tu n'auras pas besoin de numOrdo dans la table Patient !
Et bravo, tu viens de faire ta première jointure SQL !



Si le patient peut avoir plusieurs ordonnances, je te conseille de faire (comme sadeq l'a dit) :
patient : num, nom, numero_secu, adresse, etc.
ordonnance_patient : ordo_num, patient_num (Cette table est là pour permettre d'avoir plusieurs ordonnances par patient).
ligne_ordonnance : ordo_num, medicament_num, qte (un nouvel enregistrement par ligne d'ordonnance)
medicament : num, nom

par sadeq » 06 mars 2007, 11:43

En principe, un patient a plusieurs ordonnances dont chacune correpespond à une liste de qtés de médicaments. Non!

A ce moment là, il n'est pas logique d'enregistrer le n° de l'ordonnance dans la table patient puisqu'il en a plusieurs et dans cette table le patient est unique.

Le modèle correct est le suivant :
Patient (1 fois)
Médicament (1 fois)
Ordonnance (n fois) = croisement Patient X Médicament = Qtés préscrites

Et c'est la table Ordonnance qui peut être le centre de ton tableau croisé-dynamique.
Ce dernier présente alors les qtés préscrites (table Ordonnance) correspondant à un Patient (clé étrangère dans Table Ordonnance) et un Médicament (clé étrangère dans Table Ordonnance)

Donc la table Ordonnance porte un champ "qtés" et est liée aux deux tables Patient et Médicament

par arkilon » 06 mars 2007, 11:31

Merci pour ta réponse :)

J'ai donc ré-ordonné ma base de données comme cela :

- Table Patient
* Avec 3 champs : Numpatient (N°Auto), Nompatient & Ordonnance_num(qui doit correspondre au numéro d'ordonnance que l on va préscrire et qui est saisi dans la table ordonnance).

- Table Medicament
* Avec 2 Champs : Nummedic (N°Auto) & NomMedic (Nom du medicament).

- Table Ordonnance
* Avec 4 Champs : Numordo, Idpat (correspond à Numpatient, données reprise dans une variable URL), Medic (correspond à un nom de médicament choisis dans une liste déroulante qui est elle même incrémenté à partir de la table médicament), Qtémedic (correspond à la quantité préscrite de ce médicament).

Voila qui devrait correspondre à ce que tu me conseil par contre étant un newbie du PHP je n'arrive pas à voir comment faire ma requête et comment intégrer mes données au bon endroit dans le tableau ???

J'ai fait plusieurs tests toute l'aprés midi mais je n'arrive à rien serait il possible que tu me montre un exemple de requête pour faire ce que je veux faire et le genre de code qu'il faut mettre en php pour ordonner le tableau ?

QUe cela me donne une piste de départ pour continuer à avancer et non pas que tu fasses le boulot à ma place.

Je réexplique brievement mais contraines :

- Le tableau n'est pas fixe, il y à autant de colonnes que de médicaments dans la BDD et à tout moment on peux en ajouter, supprimer. Idem pour les lignes sauf que cela s'appuie sur le nom des patients.

- Donc les quantités doivent ce mettre à la jonction entre le nom du patient et le médicament qu'on lui préscris.

Si j'ai 2 minutes je v l'hebérger vite fait cela vous permettra sans doute de plus vous rendre compte.

Merci d'avance

par mere-teresa » 05 mars 2007, 17:43

Si tu en as encore l'occasion, modifie ta base pour avoir plus de tables :
- médic
- patient
- ordonnance

avec
medicament : num, nom
patient : num, nom, ordonnance_num
ordonnance : num, medicament_num, qte (un nouvel enregistrement par ligne d'ordonnance)

Cela te permettrait de récupérer toutes les données du patient A, de créer sa ligne, puis toutes les données du patient B

---
Par ailleurs, tu ne devrais pas faire autant de while() ! Je te conseille de faire ta requête, puis de traiter les résultats, et enfin de générer l'affichage.

edit: En fait, tu devrais n'avoir qu'une requête à faire !

Tableau dynamique croisé ?

par arkilon » 05 mars 2007, 15:01

Bonjour à tous.

Donc je suis entrain d'essayer de créer un tableau croisé dynamique sous PHP / MySQL et je n'ai malheuresement pas trouvé de tuto à ce sujet ou je n'ai pas su chercher.

Voici une image du tableau :
http://profile.imageshack.us/user/arkil ... phpjf0.png

La Base de Données :

* Table "medicament" qui contient 2 champs nummedic & nommedic.

* Table "patient" qui contient 5 champs
- numpatient (N° Auto)
- nompatient
- numordo (numéro de l'ordonnance saisi manuellement)
- medic1 (correspond au nom du médicament précris, incrémenté par une liste déroulante qui est basé sur la base médicament)
- qtemedic1 (qui est censé représenter la quantité du medicament).

Ce qui est fait :

- Gestion complete d'ajout/modification/ suppression des médicaments et des patients.

- Alors le tableau est crée et il m'affiche bien automatiquement les patients et médicaments si je l'ai ajoute par un formulaire, pas de souci la dessus.

Mon probléme :

Exemple je préscris à GOMIS Iness 3X du Caelyx 50 mg *

Comment faire pour que la quantité (3) s'affiche automatiquement sur la ligne correspondant au patient et sur la colone correspondant au médicament ?

Voici mon code PHP :
<?php require_once('Connections/connect_pharma.php'); ?>
<?php
mysql_select_db($database_connect_pharma, $connect_pharma);
$query_aff_medic = "SELECT nommedic FROM medicament ORDER BY nommedic ASC";
$aff_medic = mysql_query($query_aff_medic, $connect_pharma) or die(mysql_error());
$row_aff_medic = mysql_fetch_assoc($aff_medic);
$totalRows_aff_medic = mysql_num_rows($aff_medic);

mysql_select_db($database_connect_pharma, $connect_pharma);
$query_Req_recuppatient = "SELECT nompatient, numordo FROM patient ORDER BY numordo ASC";
$Req_recuppatient = mysql_query($query_Req_recuppatient, $connect_pharma) or die(mysql_error());
$row_Req_recuppatient = mysql_fetch_assoc($Req_recuppatient);
$totalRows_Req_recuppatient = mysql_num_rows($Req_recuppatient);

mysql_select_db($database_connect_pharma, $connect_pharma);
$query_req_insertordo = "SELECT * FROM patient, medicament WHERE patient.medic1 = medicament.nommedic";
$req_insertordo = mysql_query($query_req_insertordo, $connect_pharma) or die(mysql_error());
$row_req_insertordo = mysql_fetch_assoc($req_insertordo);
$totalRows_req_insertordo = mysql_num_rows($req_insertordo);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="pharmacss.css">
<title>Grille Chimio-Pharmacie</title>
<style type="text/css">
<!--
.Style3 {color: #FF0000}
-->
</style>
</head>
<body>
<p align="center"><font color="#339966"><B>Affichage du tableau de Chimio</B></font></p>
<table border="1">
	<td valign="bottom">Nom / Prénom du Patient</td>
	<td><div class="Style3" id="verticale">Numéro Ordonnance</div></td>
  <?php do { ?>
    <td><div id="verticale"><?php echo $row_aff_medic['nommedic']; ?></div></td>
  <?php } while ($row_aff_medic = mysql_fetch_assoc($aff_medic)); ?>
	<?php do { ?>
	 <tr>
      <td valign="bottom"><?php echo $row_Req_recuppatient['nompatient']; ?></td>
      <td><?php echo $row_Req_recuppatient['numordo']; ?></td>
	  <?php } while ($row_Req_recuppatient = mysql_fetch_assoc($Req_recuppatient)); ?>
	  <?php do { ?>
	  <td><?php echo $row_req_insertordo['qtemedic1']; ?></td>
	  <?php } while ($row_req_insertordo = mysql_fetch_assoc($req_insertordo)); ?>
      <td>&nbsp;</td>
  <tr>
  
  </tr>
</table>
<p align="center"><a href="saisimedic.php"><img src="images/fleche.png" width="12" height="12"> Gérer les Médicaments <img src="images/flecheinv.png" width="12" height="12"></a></p>
<p align="center"><a href="index.php"><img src="images/fleche.png" width="12" height="12"> Retour Index <img src="images/flecheinv.png" width="12" height="12"></a>	</p>
</body>
</html>
<?php
mysql_free_result($aff_medic);

mysql_free_result($Req_recuppatient);

mysql_free_result($req_insertordo);
?>
Je pense que mon probléme doit venir de la construction de mon tableau ou les boucles sont mal gérés ?

Je suis débutant en PHP, j 'ai déjà réussi à faire pas mal de truc mais la je séche sérieusement.

En vous remerciant par avance pour vos réponses.