IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème avec jointures


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut Problème avec jointures
    Bonjour à tous,

    Voici mes tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    --
    -- Base de données: `scmoreuil`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `matchs`
    --
     
    CREATE TABLE IF NOT EXISTS `matchs` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_correspondance` int(11) NOT NULL,
      `id_equipe1` int(11) NOT NULL,
      `id_equipe2` int(11) NOT NULL,
      `score` varchar(100) NOT NULL,
      `semaine` varchar(2) NOT NULL,
      `jour` varchar(1) NOT NULL,
      `date` bigint(20) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
     
    --
    -- Contenu de la table `matchs`
    --
     
    INSERT INTO `matchs` (`id`, `id_correspondance`, `id_equipe1`, `id_equipe2`, `score`, `semaine`, `jour`, `date`) VALUES
    (1, 1, 1, 1, '0 - 0', '11', '7', 1300616157);
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `matchs_correspondance`
    --
     
    CREATE TABLE IF NOT EXISTS `matchs_correspondance` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nom` varchar(100) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
     
    --
    -- Contenu de la table `matchs_correspondance`
    --
     
    INSERT INTO `matchs_correspondance` (`id`, `nom`) VALUES
    (1, 'Seniors A');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `matchs_equipe`
    --
     
    CREATE TABLE IF NOT EXISTS `matchs_equipe` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nom` varchar(100) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `matchs_equipe`
    --
     
    INSERT INTO `matchs_equipe` (`id`, `nom`) VALUES
    (1, 'SC Moreuil'),
    (2, 'Amiens SC');
    Ce que je voudrais c'est afficher ceci:

    "
    Seniors A
    SC Moreuil 0 - 0 Amiens SC
    "

    On a besoin de jointure mais je ne sais pas comment faire.

    pouvez-vous m'aider?

    merci

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut
    Salut

    En admettant que ta base de données soient en MySQL, la solution que je te propose doit être correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT e.nom | " " | m.score | " " | p.nom FROM match m LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id;
    Bon j'ai pas testé, y a peu être des erreurs, mais normalement ça doit être quelque chose du genre

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut
    Merci pour ta solution.

    Je vais la tester mais à quoi sert les | " " |?

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut
    Les pipes ( | ) permette de concaténer le tout ensemble.

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.nom | " " | m.score | " " | p.nom
    Retournera le nom de la première équipe + un espace + le score + un espace + le nom de la seconde équipe

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut
    Je ne comprends pas ton code.

    peux tu me faire un exemple?

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut
    Tu as testé ma requête ?
    Si jamais elle fonctionne, je pense que ça sera un bon exemple

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut
    En faite j'ai fait cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $retour=mysql_query('SELECT e.nom | " " | m.score | " " | p.nom FROM match m LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id');
    $donnees=mysql_fetch_array($retour);
    Mais je fait comment pour afficher sur mon site:

    echo ????

    Merci

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 37
    Par défaut
    Si t'es dans une fonction, tu peux lancer return $donnees, sinon oui, echo $donnees

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut
    Oui mais donnees('nom'] ne fonctionne pas.

    Merci de m'expliquer comment afficher.

    Merci

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $resultat_requette = mysql_query("SELECT e.nom | " " | m.score | " " | p.nom FROM match m LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id;"); 
     
    while ($affichage_ligne = mysql_fetch_array($resultat_requette)) 
          echo $affichage_ligne;
    C'est comme ça que tu dois faire pour afficher les matchs de façon itérative (c'est à dire sans utiliser d'objet, ici en l’occurrence l'objet PDO).

    Je te conseil de chercher sur internet si tu ne comprend pas ce bout de code. C'est des requêtes basiques en interrogation de base de données, c'est pas complexe à comprendre, et les infos abondent sur internet

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut
    J'ai cette erreur:

    Parse error: parse error in C:\Program Files\Programmes\Internet\wamp\www\Scmoreuil v2_1\matchs_test.php on line 77

    C'est la première ligne de ton code.

    Merci

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    faut échapper les doubles quotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat_requette = mysql_query("SELECT e.nom | \" \" | m.score | \" \" | p.nom FROM match m LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id;");
    ou ecrire la chaine en simple quote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat_requette = mysql_query('SELECT e.nom | " " | m.score | " " | p.nom FROM match m LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id;');

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Par défaut
    J'ai cette erreur maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\Programmes\Internet\wamp\www\Scmoreuil v2_1\matchs_test.php on line 111
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $resultat_requette = mysql_query('SELECT e.nom | " " | m.score | " " | p.nom FROM match m 
    									LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id;');
    while ($affichage_ligne = mysql_fetch_array($resultat_requette)) 
    		echo $affichage_ligne;
    Ligne 111:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while ($affichage_ligne = mysql_fetch_array($resultat_requette))

    Merci

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    je pense que ta requete retourne une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $resultat_requette = mysql_query('SELECT e.nom | " " | m.score | " " | p.nom FROM match m 
    									LEFT JOIN match_equipe e ON m.id_equipe1 = e.id, match_equipe p ON m.id_equipe2 = p.id;') or
    die("Erreur requete : " . mysql_error());
    en ajoutant le or die pour voire ce qui va pas aiderai mais bon j'utilise pas mysql donc j'en sais pas plus

    a tien en lisant la doc c'est bien ca soit mysql_query retourne une ressource soit false
    donc moi je ferai ceci (code ré agencé pour l'exemple et requête normalement corrigée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
    // constante permettant l'affichage ou non des bugs
    // true pour les test et false en production
    define('DEBUG_ON',true);
     
    // ecrire sous cette fore facilite la lecture, la modification et la correction
    $sql = ' SELECT e.nom | " " | m.score | " " | p.nom';
    $sql.= ' FROM match m';
    $sql.= ' LEFT JOIN match_equipe e';
    $sql.= ' ON m.id_equipe1 = e.id';
    $sql.= ' LEFT JOIN match_equipe p';
    $sql.= ' ON m.id_equipe2 = p.id';
    $sql.= ';';
    // try/catch intercepte les exceptions
    try {
    	$resultat_requette = mysql_query($sql);
    	// en théorie on teste toute variable avant utilisation
    	if($resultat_requette){
    		while ($affichage_ligne = mysql_fetch_array($resultat_requette)) {
    			// petit test du retour pas vraiment utile dans notre cas mais tellement plus propre
    			// surtout pour des codes avec des traitements derrieres
    			// c'est pour l'exemple
    			if(!is_null($affichage_ligne)){
    				echo $affichage_ligne;
    			}
    		}
    	} else {
    		$message =  'Erreur requete : ';
    		$message =  $sql.'<br>';
    		$message.=  mysql_error();
    		// renvoie une erreur (normalement)
    		throw new Exception($message);
    	}
     
    } catch (Exception $e) {
    	if(DEBUG_ON){
    		throw $e;
    	}
    }

Discussions similaires

  1. problème avec jointure dans ma requette
    Par sinifer dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/07/2009, 16h48
  2. Problème avec jointures multiples.
    Par Veritas5 dans le forum Développement
    Réponses: 3
    Dernier message: 05/06/2009, 15h42
  3. Problème avec jointure externe
    Par illight dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/04/2008, 12h23
  4. [SQL]Problème avec jointure de tables
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 29/03/2007, 20h43
  5. Problème avec jointure
    Par chips_84 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/06/2006, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo