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 :

Requête double ou autre idée [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut Requête double ou autre idée
    Bonjour à tous et toutes,

    Dans un script PHP je fais la requête MYSQL suivante pour afficher différentes fiches de prestataires:

    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
     
     
    <?php
    $ProfRecherche = $_SESSION[Rec]['Detail'];    // Liste des corps de métiers recherché
    $NbProfRecherche = count($ProfRecherche);   // Nombre de corps de métiers recherché
     
    $reqtxt = "SELECT clients_rubriques.Client_Id, clients_rubriques.Region, clients_rubriques.Rubrique_Id, clients_rubriques.Sous_Rubriques_Id, clients_rubriques.Business FROM clients_rubriques WHERE clients_rubriques.Region LIKE '%".$_SESSION[Rec]['Region']."%' AND (clients_rubriques.Sous_Rubriques_Id LIKE '%".$ProfRecherche[0]."%'";
     
    if($NbProfRecherche > 1) {
      for($i=1; $i < $NbProfRecherche; $i++) {
       $reqtxt.= " OR clients_rubriques.Sous_Rubriques_Id LIKE '%".$ProfRecherche[$i]."%'";
      }
     
    $reqtxt.=") ORDER BY clients_rubriques.Business DESC, RAND() ";
    $reqsql = mysql_query($reqtxt) OR DIE("ERREUR: ".$reqtxt);
     
    $Nbr	= mysql_num_rows($reqsql);
    ?>
    <h2 class="postheader"><span class="postheadericon">Les <?=$Nbr;?> résultats correspondant à votre recherche... </span></h2>
     </div>
     <div class="postcontent">
       <div class="content-layout layout-item-0">
        <div class="content-layout-row">
          <div class="layout-cell layout-item-1" style="width: 100%;">
            <table class="article" border="0" cellspacing="0" cellpadding="0" style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; width: 100%;">
            <tbody>
              <tr>
              <td style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: top;"><span style="text-align: justify;">&nbsp;</span><br /></td>
             </tr>
             <tr>
            <td></td>
             </tr>
           </table>
         <div class="content-layout" style="width: 100%;">
         <div class="content-layout-row" style="width: 100%;">
          <div class="layout-cell layout-item-old-0" style="width: 100%;"> </div>
         </div>
         </div>
         </div>
         </div>
         </div>
           </div>
           </div>
           <div>
    <?php
    $fd = "#FFF5CE";
    while($row	= mysql_fetch_assoc($reqsql))
    {
    $reqTxtFourn= "SELECT Id,Societe,Ville,Departement,Descriptif,Logo,Business,Vues FROM clients WHERE Id = '".$row['Client_Id']."' limit 1";
    											$reqSqlFourn = mysql_query($reqTxtFourn) OR DIE("ERREUR: ".$reqTxtFourn);
    while($Fournisseur = mysql_fetch_assoc($reqSqlFourn)) {
    												$Fou_Id          =	$Fournisseur['Id'];
    $Fou_Societe  =	$Fournisseur['Societe'];
    $Fou_Ville  = $Fournisseur['Ville'];
    $Fou_Departement = $Fournisseur['Departement'];
    $Fou_Descriptif = html_entity_decode($Fournisseur['Descriptif'],ENT_QUOTES,"UTF-8");
    $Fou_Logo = $Fournisseur['Logo'];
    $Fou_Business = $Fournisseur['Business'];
    $Fou_Vues = $Fournisseur['Vues'] + 1;
    $q1 = mysql_query("SELECT * FROM compt_vues where cpt_adresse_ip = '".$_SERVER["REMOTE_ADDR"]."' ");						if(mysql_num_rows($q1) == 0) {
    $maj	= mysql_query("UPDATE clients SET Vues = '".$Fou_Vues."' WHERE Id = '".$row['Client_Id']."' limit 1");
    $SupIp = time()-2592000;      // Suppression après 30 jours de l'adresse IP du visiteur.
    $sup	= mysql_query("DELETE FROM compt_vues WHERE cpt_date > '".$SupIp."' ");											$q2 = mysql_query("INSERT INTO compt_vues (cpt_id,cpt_adresse_ip,cpt_date) VALUES ('NULL','".$_SERVER["REMOTE_ADDR"]."', '".time()."' )" );
     
    $ProfFournisseur = explode('|',unserialize($row['Sous_Rubriques_Id']));
    $CptFournisseur = count($ProfFournisseur);
    $Profession = "";
    											if($NbProfRecherche > 0) 
    for($j=0; $j < $CptFournisseur; $j++)
    {
       if (in_array ($ProfRecherche[$j], $ProfFournisseur,true))
         {	
             $reqMettxt	= "SELECT srub_nom FROM sous_rubriques WHERE srub_active = 1 AND (srub_id = '".$ProfRecherche[$j]."') LIMIT 1";
    $reqMetsql	= mysql_query($reqMettxt) OR DIE("ERREUR: ".$reqMettxt);
    $Profession.= mysql_result($reqMetsql,0,"srub_nom").", ";
          }
         }																					
        }
     
    $CptMetier = count($Metier);	
    if($Fou_Business == 1) {$ClassBusiness = "TableRecherche"; $AffichePro = "Professionnel";} else { $ClassBusiness = "TableRechercheNonBusiness"; $AffichePro = "";
    }
    if($Nbr <= $NbrListAff) { ?>
     
    <!-- DEBUT DE TABLE DE LISTE -------------------------------- -->
    <table class='TableRecherche<?php if($Fou_Business == 0){ echo "NonBusiness";} ?>' border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="17%" align="center" valign="middle"><img id="Photo" src="../users/logos/Ico_<?=$Fou_Logo;?>" width="70" height="70" alt=""></td>
    <td width="83%">
    <table width="100%" border="0" cellpadding="0" cellspacing="2">
    <tr>
    <td width="18%" valign="top"><div align="left"><strong><?=$Fou_Societe;?></strong></div></td>
    <td width="29%" valign="top"><?=$Profession;?></td>
    <td width="17%" valign="top"><strong><?=$Fou_Ville;?></strong></td>
    <td width="22%" valign="top"><strong><?=$Fou_Departement;?></strong></td></tr>
    <tr>
    <td colspan="4" valign="top"><?=$Fou_Descriptif;?></td>
     </tr>
    <tr>
    <td><a href="details.php" class="art-button">Plus de détails</a></td>
    <td><a href="details.php" class="art-button">Envoyer une demande de devis</a></td>
    <td>&nbsp;</td>
    <td><?php if($Fou_Business == 1){ echo "<img src='../images/profess.png' width='79' height='14'>";}?></td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    <hr width="850px">
    <!-- FIN DE TABLE DE LISTE -------------------------------- -->
    <?php
    }
    else
    {
      if($Lig == 0)
      {
      ?>
       <table width="95%" border="1" bordercolor="#FFF0B7" cellspacing="0" cellpadding="2">
        <tr class="TdEnteteCenterWhite">
         <td>Dépt.</td>
            <td>Ville</td>
               <td width="12%">Enseigne</td>
    		<td>Descriptif</td>
    			<td>Vues</td>
    <td>Pro</td>
    </tr>
    <?php 
    $Lig = 1;
    }
    if($fd == "#FFFEF0") { $fd = "#FFF5CE";}
    elseif($fd == "#FFF5CE") { $fd = "#FFFEF0";}?>
    <tr bgcolor="<?=$fd;?>" onmouseover="this.bgColor='#FFCC33';" onmouseout="this.bgColor='<?=$fd;?>';" title="Cliquez pour voir la fiche complète..."; onclick="document.location.href='details.php?ID=<?=$Fou_Id;?>';" style="cursor:pointer;">
    <td><?=$Fou_Departement;?></td>
    <td><?=ucwords(strtolower($Fou_Ville));?></td>
    <td><?=$Fou_Societe;?></td>
    <td><?php
    if(strlen($Fou_Descriptif) > 75)
    {
    $Fou_Descriptif = substr($Fou_Descriptif,0,70)."... <span class='ASuivre'><em>à suivre</em></span>";
    }
    echo $Fou_Descriptif;?></td>
    <td style="width:80px;" align="right"><?=$Fou_Vues;?> fois&nbsp;</td>
    <td style="width:80px;"><?php if($Fou_Business == 1){ echo "<img src='../images/profess.png' width='79' height='14'>";}?></td>
    </tr>
    <?php 
    $Lig++;
    if(($Lig-1) == $Nbr) { ?></table><?php }
    }		// FIN DE LA CONDITION 2
    }		// FIN DE LA BOUCLE PRINCIPALE
    ?>
    La recherche se fait, mais ne s'affiche pas comme je le désirerai.
    C'est à dire:

    1- afficher en premier les fiches avec la valeur Business = 1 mais avec tri aléatoire
    2- afficher ensuite les fiches avec la valeur Business = 0 mais avec tri aléatoire.

    Auriez-vous une idée ?

    Merci de vos réponses et bonne journée.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    La recherche se fait
    J'en doute ! Il n'y a pas de FROM dans votre requête et il y manque la première partie du WHERE !

    mais ne s'affiche pas comme je le désirerais.
    Ça c'est du côté du code de l'affichage des données par PHP qu'il faut regarder et vous ne le donnez pas !

    Donnez une description des tables impliquées, un petit jeu de données et le résultat attendu; Ce sera plus facile pour vous aider.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    Voila, ai mis le code de la page

    Merci

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    je savais pas que ce genre de truc fonctionne.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT clients_rubriques.Client_Id, clients_rubriques.Business
    FROM (
     SELECT clients_rubriques.Client_Id, clients_rubriques.Business, rand() as TRI
     FROM   clients_rubriques
     WHERE 1=1 )
    ORDER clients_rubriques.Business desc, TRI asc

    Il me semble que si ça ne fonctionne pas, il faut faire le tri en php, parce que order by rand, c'est écrit "no no no" dans toutes les docs sur le web.

  5. #5
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    Ca ne fonctionne pas.

    Je crois que je vais opter pour une table temporaire.

    Merci quand même.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Comment vous y retrouvez-vous dans votre code ?
    Il est indenté n'importe comment, tout est mélangé (PHP, CSS, Contrôle, vue...)

    J'ai commencé à essayer de l'indenter mais j'y renonce.

    Affichez vos requêtes réellement envoyées au serveur et testez-les.

    Et indiquez plutôt ici la partie qui pose problème que nous balancer toute la page.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut Une solution qui fonctionne
    Pour ceux que cela intéresse, voici la réponse qui fonctionne parfaitement:
    Je rappelle le problème:
    - 1 base avec 2 possibilités de clients (Business = 1 ou 0)

    Suivant la région et le métier du client:
    - Afficher par ordre aléatoire les Business 1 en premier
    - Afficher par ordre aléatoire les Business 0 ensuite


    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
     
    $ProfRecherche = $_SESSION[Rec]['Detail'];  // Liste des corps de métiers recherché
    $NbProfRecherche = count($ProfRecherche);  // Nombre de corps de métiers recherché
    $r1 = mysql_fetch_row(mysql_query("SELECT COUNT(Client_Id) FROM clients_rubriques WHERE Business = '1'"));
    $r0 = mysql_fetch_row(mysql_query("SELECT COUNT(Client_Id) FROM clients_rubriques WHERE Business = '0'"));
     
    $reqtxt = "(SELECT DISTINCT Client_Id, Region,Rubrique_Id, Sous_Rubriques_Id, Business FROM clients_rubriques WHERE Region LIKE '%".$_SESSION[Rec]['Region']."%' AND Business = '1' AND (Sous_Rubriques_Id LIKE '%".$ProfRecherche[0]."%'";
     
    if($NbProfRecherche > 1) {
      for($i=1; $i < $NbProfRecherche; $i++) {
         $reqtxt.= " OR Sous_Rubriques_Id LIKE '%".$ProfRecherche[$i]."%'";
      }
    }
    $reqtxt.=") ORDER BY  RAND() LIMIT ".$r1[0].")";
     
    $reqtxt.= "UNION ALL (SELECT Client_Id, Region,Rubrique_Id, Sous_Rubriques_Id, Business FROM clients_rubriques WHERE Region LIKE '%".$_SESSION[Rec]['Region']."%' AND Business = '0' AND (Sous_Rubriques_Id LIKE '%".$ProfRecherche[0]."%'";
     
    if($NbProfRecherche > 1) {
      for($i=1; $i < $NbProfRecherche; $i++) {
        $reqtxt.= " OR Sous_Rubriques_Id LIKE '%".$ProfRecherche[$i]."%'";
      }
    }
    $reqtxt.=") ORDER BY RAND() LIMIT ".$r0[0].")";
     
    $reqsql = mysql_query($reqtxt) OR DIE("ERREUR: ".$reqtxt);
    C'est peut-être mal indenté dans ce formulaire, mais ça a le mérite de fonctionner!

    Bonne journée à tous.

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

Discussions similaires

  1. D'autres idées pour faire la même chose ?
    Par Gromitou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2006, 12h15
  2. Transformer les résultats d'une requête dans un autre ordre
    Par keikun dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/04/2006, 16h29
  3. requète double en 1 fois
    Par Yoshio dans le forum Débuter
    Réponses: 10
    Dernier message: 15/01/2006, 23h37
  4. Comment appeler une requête d'une autre base
    Par remi59 dans le forum Access
    Réponses: 1
    Dernier message: 17/11/2005, 10h40
  5. [Requête] Requête double, "OU" entre requêtes.
    Par muphin dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/06/2005, 15h04

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