Relation php MySQL

Résolu/Fermé
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 - 30 mai 2008 à 18:08
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 - 7 juin 2008 à 12:24
Bonjour,
J'ai créer 5 tables , date, equipe, heure, lieu, rencontre.
Dans date il y a les différente date possible des matchs, dans equipe, les différentes équipe, dans heure les différentes heure, dans lieu les différents lieu et dans rencontre j'ai no_match, no_lieu etc. la table rencontre et en relation avec les différent table , par ex je met un enregistrement dans rencontre 1,2,1,2 qui va chercher le 1er truc d'une table..
Mon problème c'est que je n'arrive pas a faire le bon code php pour afficher ce qu'il y a dans la table rencontre, quand je fait ma page sa m'affiche date : 1 heure : 2 au lieu d'aller chercher dans les autres table, donc je voudrais savoir comment on fait pour afficher les bons truc !
merci
Benoît.
A voir également:

15 réponses

alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
30 mai 2008 à 23:16
et ben c'est simple il faut tout se taper à la main mon gars
tu dois aller chercher la valeur heure qui est dans la table heure et qui porte le même numéro que celui qui est stocké dans la table rencontre. Et tu dois faire ça dans chaque colonne...

En fait le fait que ce soit relationnel ne veut pas dire que la requete ira chercher les valeurs toute seule dans les tables attachées... Tu peux en revanche programmer tes relations, pour que si jamais tu suprimme l'heure n°1, toutes les lignes de la table attachée qui utilisent l'heure n°1 soient supprimées.
Tu peux également faire en sorte que si tu essaye de créer une rencontre avec une heure N°666666, qui n'existe pas dans la table 'heure', la base de données te jette en te disant 'cette heure n'existe pas'. Voila c'est ça le 'relationnel' rien de plus, mais c'est déja bien pratique!
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
31 mai 2008 à 09:37
merci , mais c'est quel code pour faire quel va chercher la valeur heure dans la table heure ... je pense qu'il faut changer où il y a select , mais j'ai essayer plusieurs fois et j'arrive pas a trouvé le bon code.
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
31 mai 2008 à 10:12
montres nous ce que tu fais comme commande qu'on puisse t'aider ^^

de plus phpmyadmin ( et surement postgre aussi ^^ ) a un magnifique tool ^^
tu peux tester ta commande sql directement dedans pour voir si ca fct
de plus si tu fait une modif un ajout ou quoi que ce soit directement ds phpmyadmin ...
alr il te donnera la syntaxe exacte de cette commande ;)
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
31 mai 2008 à 10:17
voilà le code que j'utilise :
<?php
mysql_connect("localhost", "nomutilisateur", "mdp"); 
mysql_select_db("mabdd"); 
 
$reponse = mysql_query("SELECT * FROM rencontre"); 

 
 

 
while ($donnees = mysql_fetch_array($reponse) )
{
?>
    <p>
    <strong>No</strong> : <?php echo $donnees['no_match']; ?><br />
    Heure  : <?php echo $donnees['no_heure']; ?>, date <?php echo $donnees['no_date']; ?>  equipe <?php echo $donnees['no_equipe1']; ?>   <br />
<?php
}
 
mysql_close(); 
?>


et voilà ce que j'obtiens : http://euro2008.numero1.ch/final/php/testeuro.php
0
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
31 mai 2008 à 20:26
Faire un SELECT c'est vraiment un art. En fait toute la difficulté est là, pas ,dans le php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
31 mai 2008 à 20:39
euh.. sa m'aides pas vraiment ! je savais déjà que c'était dans le SELECT qu'il falait changé mais je sais pas comment.
0
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
2 juin 2008 à 08:09
Tutorial garçon, tutorial...
En fait, c'est un sujet bien trop vaste pour te l'expliquer ici. A la limite en voyant tes tables et en sachant ce que tu veux faire on peut te faire tes requêtes mais ça ne va pas t'apprendre grand chose.
Si tu sais te servir de phpMyAdmin, tu réussira à exporter ta base sous forme de fichier texte. Si c'est une petite base qui fait genre une dizaine d'entrées par tables, tu n'a qu'a la poster ici dans un message, en expliquant bien ce que tu veux comme requetes.
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
3 juin 2008 à 12:28
je t'envoie ma base en .sql ?
0
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
3 juin 2008 à 12:39
fais un copier coller entre deux balises "code"
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
3 juin 2008 à 12:42
-- phpMyAdmin SQL Dump
-- version 2.11.6
-- https://www.phpmyadmin.net/
--
-- Serveur: localhost
-- Généré le : Mar 03 Juin 2008 à 12:41
-- Version du serveur: 5.0.45
-- Version de PHP: 4.4.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `numero1ch8`
--

-- --------------------------------------------------------

--
-- Structure de la table `date`
--

CREATE TABLE IF NOT EXISTS `date` (
  `no` int(11) NOT NULL auto_increment,
  `date` text collate latin1_german1_ci NOT NULL,
  PRIMARY KEY  (`no`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=20 ;

--
-- Contenu de la table `date`
--

INSERT INTO `date` (`no`, `date`) VALUES
(1, '7 Juin'),
(2, '8 Juin'),
(3, '9 Juin'),
(4, '10 Juin'),
(5, '11 Juin'),
(6, '12 Juin'),
(7, '13 Juin'),
(8, '14 Juin'),
(9, '15 Juin'),
(10, '16 Juin'),
(11, '17 Juin'),
(12, '18 Juin'),
(13, '19 Juin'),
(14, '20 Juin'),
(15, '21 Juin'),
(16, '22 Juin'),
(17, '25 Juin'),
(18, '26 Juin'),
(19, '29 Juin');

-- --------------------------------------------------------

--
-- Structure de la table `equipe`
--

CREATE TABLE IF NOT EXISTS `equipe` (
  `No` int(3) NOT NULL auto_increment,
  `Nom` text collate latin1_german1_ci NOT NULL,
  `Groupe` text collate latin1_german1_ci NOT NULL,
  PRIMARY KEY  (`No`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=17 ;

--
-- Contenu de la table `equipe`
--

INSERT INTO `equipe` (`No`, `Nom`, `Groupe`) VALUES
(1, 'Suisse', 'A'),
(2, 'R&#233;publique Tch&#232;que', 'A'),
(3, 'Turquie', 'A'),
(4, 'Portugal', 'A'),
(5, 'Autriche', 'B'),
(6, 'Croatie', 'B'),
(7, 'Allemagne', 'B'),
(8, 'Pologne', 'B'),
(9, 'Pays Bas', 'C'),
(10, 'Italie', 'C'),
(11, 'Roumanie', 'C'),
(12, 'France', 'C'),
(13, 'Gr&#232;ce', 'D'),
(14, 'Su&#232;de', 'D'),
(15, 'Espagne', 'D'),
(16, 'Russie', 'D');

-- --------------------------------------------------------

--
-- Structure de la table `heure`
--

CREATE TABLE IF NOT EXISTS `heure` (
  `no` int(11) NOT NULL auto_increment,
  `heure` text collate latin1_german1_ci NOT NULL,
  PRIMARY KEY  (`no`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=3 ;

--
-- Contenu de la table `heure`
--

INSERT INTO `heure` (`no`, `heure`) VALUES
(1, '18:00'),
(2, '20:45');

-- --------------------------------------------------------

--
-- Structure de la table `lieu`
--

CREATE TABLE IF NOT EXISTS `lieu` (
  `no` int(1) NOT NULL auto_increment,
  `lieu` text collate latin1_german1_ci NOT NULL,
  PRIMARY KEY  (`no`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=9 ;

--
-- Contenu de la table `lieu`
--

INSERT INTO `lieu` (`no`, `lieu`) VALUES
(1, 'Bâle'),
(2, 'Genève'),
(3, 'Vienne'),
(4, 'Klagenfurt'),
(5, 'Zurich'),
(6, 'Berne'),
(7, 'Inssbruck'),
(8, 'Salzbourg');

-- --------------------------------------------------------

--
-- Structure de la table `rencontre`
--

CREATE TABLE IF NOT EXISTS `rencontre` (
  `no_match` int(11) NOT NULL auto_increment,
  `no_lieu` int(11) NOT NULL,
  `no_equipe1` int(11) NOT NULL,
  `no_equipe2` int(11) NOT NULL,
  `no_heure` int(11) NOT NULL,
  `no_date` int(11) NOT NULL,
  PRIMARY KEY  (`no_match`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=2 ;

--
-- Contenu de la table `rencontre`
--

INSERT INTO `rencontre` (`no_match`, `no_lieu`, `no_equipe1`, `no_equipe2`, `no_heure`, `no_date`) VALUES
(1, 1, 1, 2, 1, 1);



et si jamais a la fin je voudrais faire sa sauf que les texte serai cherché dans la base de donnée :
http://euro2008.numero1.ch/final/calendrier.html (c'est ce que j'ai fait mais en tapant tout les textes)
0
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
4 juin 2008 à 06:17
Voici un premier jet, j'ai pas réussi a récupérer le no de la 2eme équipe parcequ'il faut faire un truc un peu tordu et que là j'ai pas du tout le temps, et puis d'ailleurs je suis pas un pro du SQL, mais bon ça te donne une idée de la manip :
SELECT lieu.lieu, equipe.Nom AS EQ1, heure.heure, date.date

FROM ((((rencontre INNER JOIN lieu ON rencontre.no_lieu = lieu.no)

INNER JOIN equipe ON rencontre.no_equipe1 = equipe.No)

INNER JOIN heure ON rencontre.no_heure = heure.no)

INNER JOIN date ON rencontre.no_date = date.no);

0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
4 juin 2008 à 13:03
merci, je viens d'essayer sa marche ! sauf pour l'équipe sa affiche rien, sa m'affiche que Bâle le 7 Juin a 18:00 mais sa met pas l'équipe alors que j'ai mis d'afficher l'équipe.

si jamais voilà le code php mis :
$reponsea = mysql_query("SELECT lieu.lieu, equipe.Nom AS EQ1, heure.heure, date.date

FROM ((((rencontre INNER JOIN lieu ON rencontre.no_lieu = lieu.no)

INNER JOIN equipe ON rencontre.no_equipe1 = equipe.No)

INNER JOIN heure ON rencontre.no_heure = heure.no)

INNER JOIN date ON rencontre.no_date = date.no);"); 




 
while ($donnees = mysql_fetch_array($reponsea) )
{
?>
     
       <?php echo $donnees['lieu']; ?>  le <?php echo $donnees['date']; ?> à <?php echo $donnees['heure']; ?> 
	   <?php echo $donnees['equipe']; ?> <br />
 
<?php
}


est ce que tu pense que je devrai créer une nouvelle table equipe 2 ?
0
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
4 juin 2008 à 14:22
ça ne serait pas pro car tu aurait redondance de la liste des équipes. par contre tu pourrait externaliser le nom des équipes dans une autre table rencontre_equipes. dans la table 'rencontre' tu stockerai un no_rencontre(clé primaire), no_heure, no_date, no_lieu), et dans la table 'rencontre_equipe', tu aurais deux lignes (on dit deux tuples) associés à la même rencontre qui représenteraient l'équipe 1 et l'équipe 2
Exemple:
+-----------------------------------------+
| TABLE RENCONTRE                         |
+----------+---------+----------+---------+
| no_match | no_lieu | no_heure | no_date |
+----------+---------+----------+---------+
| 0        | 1       | 2        | 2       |
+----------+---------+----------+---------+
| 1        | 1       | 1        | 4       |
+----------+---------+----------+---------+

+----------------------------------+
| TABLE RENCONTRE_EQUIPE           |
+-------+--------------+-----------+
| no_RE | no_match     | no_equipe |
+-------+--------------+-----------+
| 0     | 1            | 12        |
+-------+--------------+-----------+
| 1     | 1            | 24        |
+-------+--------------+-----------+

La requete te donnerait alors un affichage sur deux lignes, à toi de faire une mise en page en php pour afficher ces résultats sur deux colonnes.
Cette façon de concevoir la base est plus '3NF' (c'est a dire normalisée), les renseignements sont mieux découpés.
+------------+------+-------+-----------+
| 27/05/2012 | Bale | 20:30 | France    |
| 27/05/2012 | Bale | 20:30 | Allemagne |
+------------+------+-------+-----------+

A ta place j'appellerai plutot la table 'rencontre_equipe', 'match' et le champ numero_match de la table 'rencontre' s'appellerai 'no_rencontre' et le champ 'no_RE' serait no_match
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
4 juin 2008 à 15:17
je crois que je vais quand même faire une table equipe 1 et une autre equipe 2 même si sa fait moins "pro". Merci pour tous !

edit :
voilà je viens d'essaier et il me mette une error (Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/dab85dc7b5c17954e6a4c7b15778c366/web/euro2008/final/php/testeuro2.php on line 30
)
voilà le code php que j'ai mis :
$reponsea = mysql_query("SELECT lieu.lieu, equipe.Nom, equipe2.Nom heure.heure, date.date

FROM ((((rencontre INNER JOIN lieu ON rencontre.no_lieu = lieu.no)

INNER JOIN equipe ON rencontre.no_equipe1 = equipe.No)

INNER JOIN equipe2 ON rencontre.no_equipe2 = equipe2.No)

INNER JOIN heure ON rencontre.no_heure = heure.no)

INNER JOIN date ON rencontre.no_date = date.no);"); 




 
while ($donnees = mysql_fetch_array($reponsea) )
{
?>
     
       <?php echo $donnees['lieu']; ?>  le <?php echo $donnees['date']; ?> à <?php echo $donnees['heure']; ?> 
	   <?php echo $donnees['equipe']; ?> contre <?php echo $donnees['equipe2']; ?> <br />
 
<?php
}
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
7 juin 2008 à 10:12
bonjour, j'ai réussi a trouvé pourquoi il affichait une erreur , mais sa m'affiche toujours pas les équipes .

voilà le code que j'ai utilisé, est ce que je vous envoie la basse ? pour que vous voyer si c'est une erreur au niveau de la base et pas du php ?
$reponsea = mysql_query("SELECT lieu.lieu, equipe.Nom, equipe2.Nom, heure.heure, date.date

FROM (((((rencontre INNER JOIN lieu ON rencontre.no_lieu = lieu.no)

INNER JOIN equipe ON rencontre.no_equipe1 = equipe.No)

INNER JOIN equipe2 ON rencontre.no_equipe1 = equipe2.No)

INNER JOIN heure ON rencontre.no_heure = heure.no)

INNER JOIN date ON rencontre.no_date = date.no);")or die(mysql_error()); 



// On fait une boucle pour lister tout ce que contient la table :
 
while ($donnees = mysql_fetch_array($reponsea) )
{
?>
     
       <?php echo $donnees['lieu']; ?>  le <?php echo $donnees['date']; ?> à <?php echo $donnees['heure']; ?> 
	   <?php echo $donnees['equipe']; ?> contre <?php echo $donnees['equipe2']; ?> <br />
 
<?php
}
0
benoit09 Messages postés 60 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 26 mai 2016 1
7 juin 2008 à 12:24
désolé pour ce triple post mais je peux plus modifié l'autre !!
c'est pour dire que j'ai trouvé comment faire !
enfaite c'était une erreur dans l'affichage j'avais mis equipe au lieu de Nom !! tout bêtes !
0