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 :

Function + jointure


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 50
    Par défaut Function + jointure
    Bonjour je suis en train de reprendre une function qui à été créer sur mon site mais je n'arrive pas à la modifier

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    function createwhere() {
            $session =& JFactory::getSession();
            $where = ' where published = 1 ';
    		if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype='.$type.' ';
            }
    		$retour = JRequest::getvar('retour');
    		if(!$retour){
            $ou = JRequest::getvar('ou',false);
            $quand = JRequest::getvar('quand',false);
            $horaire = JRequest::getvar('horaire',false);
            $qui = JRequest::getvar('qui',false);
    		$type = JRequest::getvar('type',false);
    		//$retour = JRequest::getvar('retour',false);
            $limitstar = JRequest::getvar('limitstart',$session->get('qui',false));
            }else{
    		$ou = $session->get('ou');
            $quand = $session->get('quand');
            $horaire = $session->get('horaire');
            $qui = $session->get('qui');
    		$type = $session->get('type');
    		//$retour = $session->get('retour');
            $limitstar = $session->get('limitstart');
    		}
            $session->set('ou',$ou);
            $session->set('quand',$quand);
            $session->set('horaire',$horaire);
            $session->set('qui',$qui);
    		$session->set('type',$type);
    		//$session->set('retour',$retour);
            $session->set('limitstart',$limitstar);
            $this->limitstart = $limitstar;
     
            if($ou) {
                $ouvalue = implode(',', $ou);
                $where .= ' and lieu in ('.$ouvalue.') ';
            }
            if($quand) {
                $quandvalue = explode(',', $quand);
                $where .= ' and JOUR_DEBUT ="'.$quandvalue[0].'" and JOUR_FIN ="'.$quandvalue[1].'"';
            }
            if($horaire) {
                /*$horairevalue = implode('","', $horaire);
                $where .= ' and horaire_afficher in ("'.$horairevalue.'") ';*/
    			 if(in_array('matin',$horaire)) {
                    $horairearray[] = ' HFIN < "12:00" ';
                }
                if(in_array('midi',$horaire)) {
                    $horairearray[] = ' (HDEB >= "12:00" and HFIN <= "14:00") ';
                }
                if(in_array('apresmidi',$horaire)) {
                    $horairearray[] = ' (HDEB > "14:00" and HFIN <= "18:00") ';
                }
                if(in_array('soir',$horaire)) {
                    $horairearray[] = ' HDEB > "18:00"  ';
                }
    			if(in_array('journeeentiere',$horaire)) {
                    $horairearray[] = ' (HDEB <= "10:00" and HFIN >= "17:00")  ';
    			}
                $where .= 'and ( '.implode(' or ', $horairearray ).' )';
            }
    		if($qui) {
                switch($qui){
                case 'Adultes':
                $where .= ' and age_min <= 24 and age_max >= 18';
                break;
                case 'Seniors':
                $where .= ' and age_min >= 25 ';
                break;
                default :           
                $where .= ' and age_min <= '.$qui.' and age_max >= '.$qui.'';
                break;
     
            }
            }
            if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype='.$type.' ';
            }
     
            return $where ;
        }

    Je crois que c'est cette ligne qui me pose probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype='.$type.' ';
            }
    car en faite avec la fonction actuelle il liste les evenement qui ont comme id_soustype='.$type.' ' alors que moi je voudrais qui affiche les evenement qui ont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FROM #__f_evenement e, #__f_soustype st
    $where .= ' and e.id_soustype = st.id and st.id_type ='.$type.' ';
    Je n'arrive pas à insérer à placer la jointure dans cette fonction.

    EN espérant avoir été clair.
    Si quelqu'un à une piste !!
    Merci d'avance de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 50
    Par défaut Re : help function
    Je me dis que je n'ai peut etre pas été assez clair alors je vais essayer d'expliquer un peu mieux parce que la je bug sur mon code

    donc j'ai une fonction qui permet d'afficher une liste d'événement en fonction de son id soustype
    par exemple tous les événements qui ont l'id soustype 121 doivent s'afficher dans ma page, et en plus de ça j'ai un moteur de recherche qui permet de filtre les résultats en fonction de la date, de l'age, du lieu...

    Voilà les 2 fonctions qui sont utiliser sur la page

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
    	function createwheresaad() {
            $session =& JFactory::getSession();
            $where = ' where published = 1 ';
     
    		if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype='.$type.' ';
            }
    		$retour = JRequest::getvar('retour');
    		if(!$retour){
            $ou = JRequest::getvar('ou',false);
            $quand = JRequest::getvar('quand',false);
            $horaire = JRequest::getvar('horaire',false);
            $qui = JRequest::getvar('qui',false);
    		$type = JRequest::getvar('type',false);
    		//$retour = JRequest::getvar('retour',false);
            $limitstar = JRequest::getvar('limitstart',$session->get('qui',false));
            }else{
    		$ou = $session->get('ou');
            $quand = $session->get('quand');
            $horaire = $session->get('horaire');
            $qui = $session->get('qui');
    		$type = $session->get('type');
    		//$retour = $session->get('retour');
            $limitstar = $session->get('limitstart');
    		}
            $session->set('ou',$ou);
            $session->set('quand',$quand);
            $session->set('horaire',$horaire);
            $session->set('qui',$qui);
    		$session->set('type',$type);
    		//$session->set('retour',$retour);
            $session->set('limitstart',$limitstar);
            $this->limitstart = $limitstar;
     
            if($ou) {
                $ouvalue = implode(',', $ou);
                $where .= ' and lieu in ('.$ouvalue.') ';
            }
            if($quand) {
                $quandvalue = explode(',', $quand);
                $where .= ' and JOUR_DEBUT ="'.$quandvalue[0].'" and JOUR_FIN ="'.$quandvalue[1].'"';
            }
            if($horaire) {
                /*$horairevalue = implode('","', $horaire);
                $where .= ' and horaire_afficher in ("'.$horairevalue.'") ';*/
    			 if(in_array('matin',$horaire)) {
                    $horairearray[] = ' HFIN < "12:00" ';
                }
                if(in_array('midi',$horaire)) {
                    $horairearray[] = ' (HDEB >= "12:00" and HFIN <= "14:00") ';
                }
                if(in_array('apresmidi',$horaire)) {
                    $horairearray[] = ' (HDEB > "14:00" and HFIN <= "18:00") ';
                }
                if(in_array('soir',$horaire)) {
                    $horairearray[] = ' HDEB > "18:00"  ';
                }
    			if(in_array('journeeentiere',$horaire)) {
                    $horairearray[] = ' (HDEB <= "10:00" and HFIN >= "17:00")  ';
    			}
                $where .= 'and ( '.implode(' or ', $horairearray ).' )';
            }
    		if($qui) {
                switch($qui){
                case 'Adultes':
                $where .= ' and age_min <= 24 and age_max >= 18';
                break;
                case 'Seniors':
                $where .= ' and age_min >= 25 ';
                break;
                default :           
                $where .= ' and age_min <= '.$qui.' and age_max >= '.$qui.'';
                break;
     
            }
            }
            if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype='.$type.' ';
            }
     
            return $where ;
        }
    	 function getlistage($limit,$type) {
     
            $db = & JFactory :: getDBO();
            $result = array();
           $filter = $this->createwheresaad();
            $where = ' where published = 1 ';
            $where .= ' and  id_soustype = '.$type.'';
          $query1 = "SELECT COUNT(id) FROM #__f_evenement ";
            if($filter)
                $query1 .= $filter ;
            $query1 .= ' and  id_soustype = '.$type.'';
     
            $db->setQuery($query1);
            $total = $db->loadResult();
            $query1 = "SELECT COUNT(id) FROM #__f_evenement ";
            if($filter)
                $query1 .= $filter;
            $db->setQuery($query1);
            $totalcategorie = $db->loadResult();
            //$arrayquand = "('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche')";
            $query2 = "SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter." order by JOUR_DEBUT ";
            $db->setQuery($query2);
            $date_afficher = $db->loadObjectList();
     
    		$query2 = "SELECT count(*) FROM (SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter.") as saad ";
    		$db->setQuery($query2);
            $totaldate = $db->loadResult();
     
            $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  HFIN < '12:00' ";
            $db->setQuery($query3);
            $horaire_afficher['matin'] = $db->loadresult();
     
            $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  (HDEB >= '12:00' and HFIN <= '14:00') ";
            $db->setQuery($query3);
            $horaire_afficher['midi'] = $db->loadresult();
     
            $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and (HDEB > '14:00' and HFIN <= '18:00') ";
            $db->setQuery($query3);
            $horaire_afficher['apresmidi'] = $db->loadresult();
     
            $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  HDEB > '18:00' ";
            $db->setQuery($query3);
            $horaire_afficher['soir'] = $db->loadresult();
     
    		$query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and (HDEB <= '10:00' and HFIN >= '17:00') ";
            $db->setQuery($query3);
            $horaire_afficher['journeeentiere'] = $db->loadresult();
     
     
            $query = "SELECT * FROM #__f_evenement ";
     
            if($filter)
                $query .= $filter;
            $query .= ' order by id ';
            $db->setQuery($query,$this->limitstart, $limit);
            $this->_application = $db->loadObjectList();
    		$saad=$query;
            $query = 'SELECT lieu , count(*) as counter FROM #__f_evenement  '.$filter.' group by lieu ' ;
            $db->setQuery($query);
            $lieu = $db->loadObjectlist();
            $query = 'select id, Nom_Lieu from #__f_lieuHY where id in (select distinct(lieu) FROM #__f_evenement ) order by Nom_Lieu' ;
            $db->setQuery($query);
            $lieunom = $db->loadObjectlist();
     
            $result[0] = $this->_application;
            $result[1] = $total;
            $result[2] = $date_afficher;
            $result[3] = $horaire_afficher;
            $result[4] = $lieu;
            $result[5] = $lieunom;
            $result[6] = $totalcategorie;
    		$result[7] = $saad;
    		$result[8] = $totaldate;
     
     
            return $result;
     
        }
    id_soustype se trouve dans la table f_evenement
    dnc la tout fonctionne tres bien sauf que moi je voudrais afficher les evenement qui ont un
    id_soustype = st.id and st.id_type ='.$type.' ';

    J'ai une table sous_type (st) avec
    id
    id_type

    Donc si id type =121
    il devrait afficher tous les evenement qui ont un st.id_type = à 121

    Mais je mais ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($type) {
                FROM #__f_evenement e, #__f_soustype st
    $where .= ' and e.id_soustype = st.id and st.id_type ='.$type.' ';
            }
    Cela ne fonctionne pas je ne comprend vraiment pas comment lui utiliser cette jointure.

    Merci d'avance pour toutes les piste qui pourrait être proposer et aussi merci si vous avez lu ce message jusqu'à la fin, c'est déjà sympa.

  3. #3
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Bonsoir,

    Un message d'erreur quelque part peut être ? Explique plus précisément pourquoi "ça ne marche pas".
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 50
    Par défaut re : help function
    Quand je remplace ce code à la ligne 79

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype='.$type.' ';
            }
    Par celui ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         if($type) {
                //$typevalue = implode('","', $type);
                $where .= ' and id_soustype = st.id and st.id_type ='.$type.' '.
    					  'FROM #__f_evenement , #__f_soustype st ';
            }
    Il m'affiche
    Aucune activité ne correspond à vos critère de recherche

    Alors que j'ai des activités qui ont sous type qui appartient au type id 121

    Je ne comprend pas pourquoi il ne me trouve aucun activités

  5. #5
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Peux-tu mettre la structure des tables qui te servent dans la requête ? Car au premier coup d'oeil, tu n'as pas de jointures comme tu dis. Et si tu cherches à en faire une, il y a un problème dans ton where, tu ne dois pas utiliser les bons champs.
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 50
    Par défaut re : help function
    Merci de ton aide et voici la structure des tables evenement et soustype


    Table f_evenement

    id
    nouveau
    Id_evenement
    id_soustype int(11)
    INTIT1
    INTIT2
    age_min
    age_max
    age_afficher
    horaire_afficher
    niveau
    JOUR
    JOUR_DEBUT
    JOUR_FIN
    HDEB
    HFIN
    NB
    NB_Budget
    Cd_Tarif
    Statut
    NOCPT
    NOCPTVE
    FAM_ACTIV
    lien_connexes
    sujets_connexes
    alias
    mots_photos
    titre_objectif
    text_objectif
    media_details
    image_details
    accueil
    published
    Chemin_album
    lieu
    Cde_Sous_Lieu

    Table f_soustype

    id
    nom
    alias
    image
    id_type
    published
    ordering

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  3. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  4. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37
  5. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29

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