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 :

resultat plusieurs lignes choix colonnes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Par défaut resultat plusieurs lignes choix colonnes
    Hello all,

    Un probleme sur lequel je bloque completement :

    J'ai deux tables, disons : "restaurant" et "horaire"

    Voici ma requete :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM restaurant r 
    INNER JOIN timetable t ON t.id_shop = r.id_restaurant
    WHERE r.name LIKE :enter_search
    GROUP BY r.name

    Pour obtenir le resultat j'utilise un "while"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($donnees = $reponse->fetch()){
    Dans l'affichage de mon resultat j'utilise un petit tableau qui inclue les horaires.
    Ma question est : comment je peux faire pour que mon tableau n'inclue pas uniquement LUNDI ?

    Car moi j'ai l'habitude d'afficher uniquement $RESULTAT[NOM_COLONNE]Est ce qu'il serait possible de mettre un argument pour preciser le resultat du style $RESULTAT["nom_duresto_1"]["lundi"]["ouverture"] ????

    Un pimousse a celui qui trouve.

    Merci,
    FS

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi fais-tu un GROUP BY sur le nom du restaurant ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonsoir,

    plusieurs choses,

    tu ne peut pas utiliser de GROUP BY si tu n'utilise pas de fonction de regroupement dans ta requête ( count, sum, ...),

    ensuite,

    que contient la table timetable ? les jours de la semaine ?

    Je pense que tu va devoir créer ton tableau avec ce que ta requête te retourne toi-même :
    Code php : 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
    //Ta requête SQL
    $sql = 'SELECT *
    FROM restaurant r 
    INNER JOIN timetable t ON t.id_shop = r.id_restaurant
    WHERE r.name LIKE :enter_search';
     
    //On l'exécute et on place le paramètre
    $req = $bd->prepare($sql);
    $req->execute( array('enter_search'=>$var) );
     
    //$tab sera ton planning d'ouverture de tes restaurants
    $tab = array();
     
    //Pour chaque jour de chaque restaurant tu a un enregistrement dans ta BDD
    while( $data = $req->fetch(PDO::FETCH_ASSOC) ){
        $tab[$data['nomResto']][] = array('nomJour'=>$data['nomJour']
                                         ,'heureOuverture'=>$data['heureOuverture']
                                         ,'heureFermeture'=>$data['heureFermeture'] ); 
    }

    Donc tu aura un tableau du genre :
    Code php : 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
    array(
        'resto1' => array(
            array('nomJour' => 'Lundi',
                  'heureOuverture'=>'08:30',
                  'heureFermeture'=>'20:30',
            ),
            array('nomJour' => 'Mardi',
                  'heureOuverture'=>'09:30',
                  'heureFermeture'=>'21:30',
            )
        ),
        'reto2'=>array(
            array('nomJour' => 'Mercredi',
                  'heureOuverture'=>'11:30',
                  'heureFermeture'=>'18:30',
     
        )
    )

    Donc il te restera plus qu'a traiter ton tableau.

    Je te laisse voir pour la forme que tu veut exactement pour ton tableau, mais la logique reste la même.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Par défaut
    Si j'utilise la requete que j'ai cite au dessus, j'obtiens (sans le GROUP BY) 14 lignes de reponse : disons que ma recherche me donne deux restaurants, il faut ajouter 7 lignes supplementaire qui represente les horaires du restaurant pour chaque jour de la semiane. Donc, si j'ai deux restaurants, 14 lignes.

    Pourquoi j'utilisais le GROUP BY ?

    Etant donne que j'utilise un WHILE pour afficher les resultats de ma requete, je vais avoir pour deux restaurants 14 tableaux qui vont se construire ...

    Je vais tester la solution de tout mettre dans un tableau mais je pense que je devrais faire deux requetes SQL : une pour les restaurants et les l'autre pour les horaires.

    D'ailleurs derniere question qui me vient a l'esprit : Pour des raisons de performance, vaut-il mieux faire deux requetes disctintes en fonction du nom de restaurant :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM restaurant r
    WHERE r.name LIKE "TEST%"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM horaire h
    INNER JOIN restaurant r ON r.id_restaurant = t.id_shop AND r.name LIKE "TEST%"

    Et classer tout ca dans des list/tableau ?

    OU ALORS

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM restaurant r
    WHERE r.name LIKE "TEST%"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM horaire h
    WHERE h.id_shop IN (SELECT *
                                 FROM restaurant r
                                 WHERE r.name LIKE "TEST%")

    et mettre les resultats un tableau ?


    Merki.
    FS

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il est tout à fait normal de récupérer une ligne par restaurant et par jour.

    Pour le "comment construire un tableau HTML avec ça", tu devrais lire avec attention la méthode que te montre Exia93.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Utilise qu'une seul requête qui remonte toutes les infos ensuite tu les traites soit dans un tableau ou d'une autre manière suivant le besoin.

    Comment sont structurée tes deux table ? (SHOW CREATE TABLE maTable)

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Par défaut
    Re-Bonjour a tous,

    J'ai teste ta solution Exia et c'est parfait.
    J'ai une derniere question avant de clore cet item :

    Si je reprends ma requete initiale :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM restaurant r 
    INNER JOIN timetable t ON t.id_shop = r.id_restaurant
    WHERE r.name LIKE :enter_search

    je suis oblige de setter TOUTES mes variables dans le while du resultat de ma requete car si je fais un deuxieme WHILE pour completer un deuxieme ARRAY, celui-ci reste vide.

    Du coup, pour detourner le systeme, j'ai fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while( $data = $req->fetch(PDO::FETCH_ASSOC) ){
        $tab[$data['nomResto']][] = array('nomJour'=>$data['nomJour']
            ,'heureOuverture'=>$data['heureOuverture']
            ,'heureFermeture'=>$data['heureFermeture']
            ,'nom_resto'=>$data['nom_resto']
            ,'prix'=>$data['prix']
            ,'trucA'=>$data['trucA']
            ,'trucB'=>$data['trucB'] ); 
    }
    Le probleme c'est que je complete plusieurs fois des champs qui ont deja une valeur inseree puisque les tables HORAIRE et RESTAURANT sont de forme differente :

    RESTAURANT
    ID - Nom - Param 1 - Param 2
    1 - Test - AAA - BBB

    HORAIRE
    ID - ID_SHOP - JOUR - OUVERTURE - FERMETURE
    1 - 1 - Lundi - 8 - 19
    2 - 1 - Mardi - 8 - 19

    Est il possible de faire deux WHILE a la suite ? Ou a defaut, voyez vous une alternative a cet moitie de probleme ?

    Merci,
    FS

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une Legend sur plusieurs lignes ou colonnes
    Par Copepode dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/05/2021, 10h53
  2. [2008] Regrouper plusieurs lignes en colonnes
    Par jeremy.bras dans le forum Développement
    Réponses: 6
    Dernier message: 29/07/2014, 13h59
  3. Titre d'une table ayant plusieurs lignes et colonnes
    Par romson2 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 21/12/2010, 01h36
  4. Réponses: 4
    Dernier message: 29/08/2008, 14h21
  5. [SQL] Remplir une base SQL à partir d'un tableau à plusieurs lignes et colonnes
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/08/2007, 08h56

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