2 table dans 1 tableau

2 table dans 1 tableau - PHP - Programmation

Marsh Posté le 18-05-2005 à 14:20:00    

Salut a tous.
 
J'essaye en vain de faire un tableau qui permet d'afficher des données provenant de 2 tables differentes (c'est la meme base :O)
 
Les 2 tables:
 
TABLE1:
id_pc
num_serie
nom_pc
salle
statut (ok/en panne)
 
TABLE 2:
id_panne
date_panne
date_reparation
num_serie
declarant
detail
etat (ok/en panne)
 
Le but étant d'afficher les pc qui ont dans la table 1, statut=ok et dans la table2, etat=ok. le truc c'est qu'il y'a une concordance avec le num_serie qui est commun au deux tables.
 
ce qui devrait donnée une fois la requete SQL traité:
 


|Id panne|Nom du PC|Salle|Date de Réparation | Date de panne       | declarant | Numero de serie  | Détail | statut  
|   1    |  pc1    |  G1 |2005-05-17 16:15:37| 2005-05-09 14:07:54 | yoann     | 12345            | Cassé  | OK      
|   3    |  pc2    |  G2 |2005-05-17 16:55:03| 2005-05-17 16:54:51 | yoann     | 654321           | HS     | OK      


Donc on peut observé que le l'id_panne, date de réparation, date de panne, declarant, detail provient de la table2, mais que le nom_pc provient de la table1.
 
 
Le souci c'est que mon resultat actuel n'est pas vraiment au point :lol:.
Voila le resultat
 


 
|Id panne | Nom du PC | Date de Réparation |   Date de panne     | déclarant | Numero de serie |  Détail | Statut  
|1        | pc1       |2005-05-17 16:15:37 | 2005-05-09 14:07:54 | yoann     |12345            |cassé    | OK  
|3        | pc1       |2005-05-17 16:55:03 | 2005-05-17 16:54:51 | yoann     |12345            | HS      | OK
|1        | pc2       |2005-05-17 16:15:37 | 2005-05-09 14:07:54 | yoann     |2512040102       |cassé    | OK
|3        | pc2       |2005-05-17 16:55:03 | 2005-05-17 16:54:51 | yoann     |2512040102       | HS      | OK
 


 
Comme vous pouvez le voir il a tous mélangé :/
 
 
Voici ma requete SQL
 

Code :
  1. include ("config.inc.php" );
  2. $db = mysql_connect($global['serveur'], $global['loginbdd'], $global['passbdd']);
  3.   mysql_select_db($global['nombdd'],$db);
  4.    
  5.   $query="SELECT * FROM panne, parc_pc WHERE `panne`.etat='ok' LIMIT 0, 10";
  6. //AND(`parc_pc`.statut='ok')
  7.   $req = mysql_query($query) or die ('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
  8.   $i=0;
  9.  
  10.   while($data = mysql_fetch_array($req))
  11.    
  12. {
  13.      
  14.     echo '<tr bgcolor=#c6d6e7>'; 
  15.     echo '<td>'.$data['id_panne'].'</td>';
  16.     echo '<td>'.$data['nom_pc'].'</td>';
  17.     echo '<td>'.$data['date_r'].'</td>';
  18.     echo '<td>'.$data['date_p'].'</td>';
  19.     echo '<td>'.$data['prof'].'</td>'; 
  20.     echo '<td>'.$data['num_serie'].'</td>';
  21.     echo '<td>'.$data['detail'].'</td>'; 
  22.     echo '<td>'.$data['rapport'].'</td>';
  23.     echo '</tr>'; 
  24. }
  25. mysql_close();


 
je comprend vraiment pas trop ou est l'erreur, alors si vous pouviez me filer un coup de main
 
Merci beaucoup a vous :)


Message édité par kontas le 18-05-2005 à 14:24:37
Reply

Marsh Posté le 18-05-2005 à 14:20:00   

Reply

Marsh Posté le 18-05-2005 à 14:46:02    

Tu a omis de faire le lien entre les deux tables
Essayes la requête suivante :
 

Code :
  1. SELECT a.* , b.*
  2. FROM panne a, parc_pc b
  3. WHERE a.num_serie LIKE b.num_serie
  4. AND   a.etat      LIKE 'ok'
  5. AND   b.status    LIKE 'ok'
  6. LIMIT 0, 10


 
Tu peux ainsi identifier chaque champ que tu souhaites ramener (a.nom_pc, etc ...)
Je préfère 'LIKE' à '=' (dans des constructeurs de requête, tu sera amené parfois à utiliser '%' qui ne fonctionne qu'avec 'LIKE' ou 'NOT LIKE')

Reply

Marsh Posté le 18-05-2005 à 17:55:10    

Merci a toi pour ton aide  :hello:  
 
quand j'ai essayer ton code j'avais plein d'erreur, comme si il traité que la premiere parti de la requete, puisque le message indiqué une erreur sur la selection des autres champs (table2)
 
mon collegue c'est penché dessus et a reussi a le faire marché, voici le code :)
 

Code :
  1. $query="SELECT * FROM panne, parc_pc WHERE (`panne`.etat='ok' AND panne.num_serie=parc_pc.num_serie) LIMIT 0, 10";


 
donc d'apres ce que je comprend il manqué la condition qui lier les 2 table, d'ou le panne.num_serie=parc_pc.num_serie

Reply

Marsh Posté le 18-05-2005 à 18:12:46    

Là tu m'étonnes !
Tu utilises quel type de bdd ?
J'ai volontairement scindé ma requête pour bien te faire comprendre la syntaxe. Tu as pensé à reformer la chaine avant ?
 

Code :
  1. $query="SELECT * FROM panne a, parc_pc b WHERE a.num_serie LIKE b.num_serie AND a.etat LIKE 'ok' AND b.status LIKE 'ok' LIMIT 0, 10";


 
Mais bon, l'essentiel c'est que tu sois parvenu à tes fins.


Message édité par robbyone le 18-05-2005 à 18:15:02
Reply

Marsh Posté le 18-05-2005 à 22:13:51    

robbyone a écrit :

Là tu m'étonnes !
Tu utilises quel type de bdd ?
Heu, je vois pas trop ce que tu veu dire :/
J'ai volontairement scindé ma requête pour bien te faire comprendre la syntaxe. Tu as pensé à reformer la chaine avant ?Erf, j'ai vriament de grosse lacune, je comprent pas non plus ce que tu veu dire
 

Code :
  1. $query="SELECT * FROM panne a, parc_pc b WHERE a.num_serie LIKE b.num_serie AND a.etat LIKE 'ok' AND b.status LIKE 'ok' LIMIT 0, 10";


 
Mais bon, l'essentiel c'est que tu sois parvenu à tes fins.ben j'aimerais aussi apprendre au passage  [:canaille]


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed