Partage
  • Partager sur Facebook
  • Partager sur Twitter

jointure tables croisées

    20 novembre 2010 à 8:12:03

    Je n'arrive pas à trouver le script qui me donne le résultat escompté j'ai simplifié les données pour rendre compréhensible mon problème.
    J'ai dans ma base de donnée 2 tables:
    la table journées_train:
    a b c d
    2011-01-01 2011-01-01 2011-01-01 2011-01-01
    2011-01-02 2011-01-02 2011-01-02 2011-01-05
    2011-01-03 2011-01-03 2011-01-05 2011-01-06
    2011-01-04 2011-01-05 2011-01-06 2011-01-07


    et la table ter:
    numero prix jour
    1 10 a
    2 20 b
    3 30 c



    je voudrais pour une date $_POST['date_depart']=2011-01-03 optenir le résultat suivant:

    le train numero 1 part le 2011-01-03 coute 10
    le train numero 2 part le 2011-01-03 coute 20

    voilà mon script qui ne fait pas le tri.


    <h3> numero trains circulant le <?php echo $_POST['heure_depart'];?> </h3>
    <p>
    
    	<?php
    	try
    	{
    		$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    }
    	catch(Exception $e)
    {	
    			die('Erreur : '.$e->getMessage());
    }	
    	$req = $bdd->query("SELECT * 
    	FROM journees_train jt, ter
    	WHERE jt.a= '" . $_POST['heure_depart'] . "' OR jt.b='" . $_POST['heure_depart'] . "'OR jt.c = '" . $_POST['heure_depart'] . "'OR jt.d ='" 
    	. $_POST['heure_depart'] . "' ") or die(print_r($bdd->errorInfo()));
    
    	while ($donnees = $req->fetch()  )
    	{
    	echo  'le train numero '.$donnees['numero']. 'part à ' .$_POST['heure_depart'].  'coute '.$donnees['prix']. '<br />';
    	}
    	$req->closeCursor();
    	?>
    	</p>
    



    Comme résultat le numero 3 s'affiche alors qu'il ne tourne pas le 2011-01-03
    Merci pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2010 à 8:31:25

      Si de toute façon, chaque train n'a qu'un jour de départ, pourquoi ne mets-tu pas cette date directement dans le champs jour de la table ter ??

      Ca me semble très mal conçu comme base...
      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2010 à 8:42:47

        il a tous les jours 'a' en référence au tableau 'journée_train'
        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2010 à 9:11:16

          Ok. Dans ce cas, il vaudrait mieux que ta table ait un champ date, et un champ numero_train. Plutôt que ces champs a, b, c, d.
          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2010 à 10:59:09

            Faudrait que tu relises un bon coup le cours officiel et compléter par d'autres tutos parce que là, t'as construit ta base complètement à l'envers.
            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2010 à 12:52:44

              Citation : taguan

              Ok. Dans ce cas, il vaudrait mieux que ta table ait un champ date, et un champ numero_train. Plutôt que ces champs a, b, c, d.


              J'ai essayé cela implique que chaque date ai son champ dans ce cas là je n'arrive pas à faire la requéte, comment demander $_POST= une valeur pouvant se trouver quelque part dans la table ter, et récupérer ensuite la donnée 'numero' et la donnée 'prix' de ce train qui comporte cette date?

              Citation : rotoclap

              Faudrait que tu relises un bon coup le cours officiel et compléter par d'autres tutos parce que là, t'as construit ta base complètement à l'envers.


              Tu veux dire la table 'journees_train' à l'envers,
              en construisant la table 'journees_train' dans l'autre sens sous la forme:
              periode 2011-01-01 2011-01-02 2011-01-03 2011-01-04 2011-01-05 2011-01-06 2011-01-07
              a 2011-01-01 2011-01-02 2011-01-03 2011-01-04 NULL NULL NULL
              b 2011-01-01 2011-01-02 2011-01-03 NULL 2011-01-05 NULL NULL
              c 2011-01-01 2011-01-02 NULL NULL 2011-01-05 2011-01-06 NULL
              d 2011-01-01 NULL NULL NULL 2011-01-05 2011-01-06 2011-01-07

              Dis moi comment faire la requete $_POST= une valeur pouvant se trouver quelque part dans la table journees_train, et récupérer ensuite les données periodes qui contiennent cette date ?
              Merci de votre aide
              • Partager sur Facebook
              • Partager sur Twitter
                21 novembre 2010 à 9:10:41

                Table journees_train :

                date_depart numero_train
                2011-01-01 1
                2011-01-02 1
                2011-01-03 1
                2011-01-04 1
                2011-01-01 2
                2011-01-02 2
                2011-01-03 2
                2011-01-05 2
                2011-01-01 3
                2011-01-02 3
                2011-01-05 3
                2011-01-06 3


                Table ter :

                Numero Prix
                1 10
                2 20
                3 30


                SELECT journees_trains.date_depart, ter.numero, ter.prix
                FROM ter
                INNER JOIN journees_trains ON ter.numero = journees_trains.numero_train
                WHERE journees_train.date_depart = '2011-01-03'
                
                • Partager sur Facebook
                • Partager sur Twitter
                  21 novembre 2010 à 10:35:08

                  Ta solution fonctionne mais pratiquement c'est trés lourd à mettre en place il y a beaucoup trop de dates et de ter dans la réalité pour appliquer cette méthode.
                  penses pouvoir exploiter un tableau comme celui qui suit pour arriver au même résultat car pour moi il serait beaucoup plus simple à élaborer.
                  date_ter 1 2 3
                  2011-01-01 1 1 1
                  2011-01-02 1 1 0
                  2011-01-03 1 0 0
                  2011-01-04 0 0 0
                  2011-01-05 0 1 1
                  2011-01-06 0 0 1

                  merci pour l'aide
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 novembre 2010 à 10:36:47

                    Désolée, mais la solution que je te propose est la plus optimale. Comment feras-tu s'il te faut ajouter un train ??

                    Il vaut mieux avoir beaucoup de lignes qu'une base de données mal fichue.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 novembre 2010 à 11:04:12

                      et bien je rajoute un champ dans la table ça je sais faire
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 novembre 2010 à 11:07:47

                        Si tu dois ajouter des champs quand tu ajoutes des données, c'est que ta base est mal conçue. La solution que je te donne est la bonne.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 novembre 2010 à 11:38:03

                          Oui, si une BDD est bien construite, tu ne touches pas aux champs jusqu'à la prochaine évolution de ton architecture. Et ajouter un TER, c'est pas une évolution.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 novembre 2010 à 12:19:38

                            je n'ai jamais voulu rajouter un champ, c'est pour répondre à une intervention précédente.
                            Ma demande au depart est simple je recherche un script pour obtenir la solution décrite en bas.

                            j'ai volontairement simplifié les données pour rendre compréhensible mon problème.

                            Ce dont je suis sur c'est qu'il faut deux tableaux car les champs de la table 'journees_train' vont servir pour plusieurs 'numero' de la table 'ter'.

                            Les tables 'ter' et 'journees_train' dans la pratique auront énormément de données .

                            Je n'arrive pas à trouver le script qui me donne le résultat escompté peut etre faut il présenter la table avec les dates différemment, utiliser des boleens?

                            J'ai dans ma base de donnée 2 tables:

                            la table journées_train:
                            a b c
                            2011-01-01 2011-01-01 2011-01-01
                            2011-01-02 2011-01-02 2011-01-05
                            2011-01-03 2011-01-05 2011-01-06
                            2011-01-04 2011-01-06 2011-01-07



                            et la table ter:
                            numero prix jours
                            1 10 a
                            2 20 b
                            3 30 c





                            je voudrais pour une date $_POST['date_depart']=2011-01-03 optenir le résultat suivant:

                            le train numero 1 part le 2011-01-03 coute 10
                            le train numero 2 part le 2011-01-03 coute 20

                            Je fais bien finir par trouver sur ce forum la solution! merci.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 novembre 2010 à 12:21:59

                              Je t'ai donné la meilleure solution. Après, si tu ne veux pas suivre mes conseils, tant pis. Mais la solution, elle est là. Si tu ne fais pas comme ça, ta base de données sera mal conçue, et tôt ou tard, ça te posera problème.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 novembre 2010 à 12:34:33

                                dire c'est la meilleure solution c'est comme dire c'est impossible.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  21 novembre 2010 à 12:38:23

                                  Et s'entêter à ne pas suivre les conseils, ça c'est possible.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 novembre 2010 à 12:38:30

                                    Nope, ça n'a rien d'impossible. C'est toi qui refuse de la mettre en place. Et j'ai toujours pas compris pourquoi d'ailleurs, parce que ça n'implique pas plus de boulot que ce que tu fais pour l'instant.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 novembre 2010 à 12:50:50

                                      Je veux simplement savoir si dans mysql, dans une table (ter),je peux avoir une donnée (a ou b ou c ) qui est en réalité un ensemble de données et comment les exploiter avec mysql ou php.
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      jointure tables croisées

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown