Grouper le résultat d'une réquête msql

Adony -  
 Adony -
Bonjour,

J'aimerai récupérer et afficher par groupe le contenu d'une table sur mon site.
A l'état actuel, voici le code que j'utilise pou lister le contenu de ma table:
--------------------------------------
function showPublishedmembers($option)
{
$db =& JFactory::getDBO();
$query = "SELECT * FROM #__members WHERE country > 'a' ORDER BY country, city, company";
$db->setQuery( $query );
$rows = $db->loadObjectList();

if ($db->getErrorNum())
{
echo $db->stderr();
return false;
}

HTML_members::showmembers($rows, $option);
}
-------------------------------------
J'obtiens un résultat de cette forme:

Country1-City(a)-Company(a)
Country1 cyty(b)-Company(b)
Country2-City-company
Country3-city(a)-company(a)
Country3-city(b)-company(b)

Quelle serait la solution pour regrouper les résulats par country, de sorte à avoir un résultat sous cette forme:

Country1
- City(a)-Company(a)
- cyty(b)-Company(b)
Country2
-City-company
Country3
-city(a)-company(a)
-city(b)-company(b)

Merci d'avance pour vos propositions.
Configuration: Windows XP
Firefox 3.0.6

2 réponses

  1. Psyk974 Messages postés 559 Statut Membre 51
     
    Bonjour,

    Donc si j'ai bien compris voici ce que tu dois faire
    Bon je ne comprends pas trop ton interrogation de base de données mais je vais essayer de t'expliquer le principe.

    Pour l'instant tu te contentes de lister uniquement

    Pour lister par country tu dois d'abord faire une requête qui va parcourir toutes tes country
    $query = "SELECT DISTINCT(country) FROM #__members WHERE country > 'a' ORDER BY country";

    Ensuite tu dois faire une boucle pour afficher ces country et à l'interieur tu vas refaire une requête qui va lister les city en fonction des country

    boucle {
    $country = $db->stderr() //$country reçoit le nom de ta country

    $query = "SELECT * FROM #__members WHERE country > 'a' AND country ="$country" ORDER BY city, company";

    }

    Voila déjà ça dis moi si tu comprends...
    0
    1. Adony
       
      Bonsoir Psyk,
      Tout d'abord merci de votre réponse et de la pédagogie avec laquelle vous procédez.
      Je n'ai pas compris votre solution. En fait je croyais l'avoir compris mais quand je l'applique j'ai le message d'erreur suivant: Parse error: parse error in ...\components\com_members\members.php on line 38.

      Pour plus de clarté je vais inclure à ce message la totalité de mes script:


      members.php=

      <?php
      defined( '_JEXEC' ) or die( 'Restricted access' );

      echo '<div class="heading"><h5>ETC Members</h5></div>';

      jimport('joomla.application.helper');
      require_once( JApplicationHelper::getPath( 'html' ) );
      JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');
      jimport( 'joomla.utilities.date');

      switch($task)
      {

      case 'remove':
      removemembers( $option );
      break;

      case 'view':
      viewmember($option);
      break;



      default:
      showPublishedmembers($option);
      break;
      }



      function showPublishedmembers($option)
      {
      $db =& JFactory::getDBO();
      $query = "SELECT DISTINCT(country) FROM #__members WHERE country > 'a' ORDER BY country";
      {
      $country = $db->stderr() //$country reçoit le nom de ta country

      $query = "SELECT * FROM #__members WHERE country > 'a' AND country ="$country" ORDER BY city, company";

      }

      //$query = "SELECT * FROM #__members WHERE country > 'a' ORDER BY country, city, company";
      $db->setQuery( $query );
      $rows = $db->loadObjectList();

      if ($db->getErrorNum())
      {
      echo $db->stderr();
      return false;
      }

      HTML_members::showmembers($rows, $option);
      }

      function viewmember($option)
      {
      $id = JRequest::getVar('id', 0);

      $row =& JTable::getInstance('member', 'Table');
      $row->load($id);

      if(!$row->approved)
      {
      JError::raiseError( 404, JText::_( 'Invalid ID provided' ) );
      }

      HTML_members::showmember($row, $option);

      $db =& JFactory::getDBO();

      $db->setQuery("SELECT * FROM #__members WHERE cb_theatres >= 'A%' ");
      $rows = $db->loadObjectList();


      }

      ?>


      members.html.php
      <?php
      defined( '_JEXEC' ) or die( 'Restricted access' );

      class HTML_members
      {
      function showmembers($rows, $option)
      {
      ?><table>
      <form name="adminForm" action="index.php" method="post">

      <table width="100%" cellpadding="4" cellspacing="0" border="0" align="center">
      <tr>
      <td colspan="4"><?php echo $menuname; ?></td>

      <td align="right" nowrap="nowrap"><?php
      foreach($rows as $row)
      {
      $link = JRoute::_('index.php?option=' . $option . '&id=' . $row->id . '&task=view');
      echo
      '<tr>

      <td colspan="1">' . $row->country . '</td>
      <td >' . $row->city . '</td>
      <td ><a href="' . $link . '">' . $row->company . '</a></td>
      </tr>';

      }
      ?></table><?php
      }

      function showmember($row, $option)
      {
      ?>
      <p class="contentheading"><h5><?php echo $row->company; ?></h5></p>


      <p><strong>Address:</strong> <?php echo $row->zipcode ; ?> , <?php echo $row->address; ?></p>
      <p><strong>City:</strong> <?php echo $row->city; ?></p>
      <p><strong>Country:</strong> <?php echo $row->country; ?></p>
      <p><strong>Phone:</strong> <?php echo $row->phone; ?></p>
      <p><strong>Fax:</strong> <?php echo $row->fax; ?></p>
      <p><strong>Email:</strong> <a href="<?php echo $row->cb_email; ?></p>
      <span style="font-size: 12pt; font-family: 'Times New Roman','serif'"><a href="mailto://<?php echo $row->cb_email ?> " target="_blank"><?php echo $row->cb_email?></span></a></span>
      <p><strong>Website: </strong> <a href="http://<?php echo $row->website;?></p>
      <span style="font-size: 12pt; font-family: 'Times New Roman','serif'"><a href="http://<?php echo $row->website ?> " target="_blank"><?php echo $row->website?></span></a></span>
      <p><?php echo $row->cb_yourtheaterdescription; ?></p>
      <p><em></em> <?php echo $row->cb_theatres;?></p>
      <?php $link = JRoute::_('index.php?option=' . $option) ; ?>
      <a href="<?php echo $link; ?>">Return to the members list</a>
      <?php
      }

      }

      ?>

      pratiquement j'obtiens le résultat suivant:

      Belarus Minsk Le mongadore de Minsk
      Belgium Brussels la Communauté Wallonie Bruxelles
      Belgium Liège Palais de la Place
      Croatia Rijeka Zajca Rijeka
      Croatia Zagreb Zagrebacko Kasaliste
      Cyprus Nicosia THOC
      Finland Helsinki Helsingin Kaupungi
      France Nice CDN- de Nice
      France paris maison d'europe et d'orient


      Or j'aimerai obtenir un classement de ce type:

      Belarus
      Minsk Le mongadore de Minsk
      Belgium
      Brussels la Communauté Wallonie Bruxelles
      Liège Palais de la Place
      Croatia
      Rijeka Zajca Rijeka
      Zagreb Zagrebacko Kasaliste
      Cyprus
      Nicosia THOC
      Finland
      Helsinki Helsingin Kaupungi
      France
      Nice CDN- de Nice
      paris maison d'europe et d'orient


      Qu'en pensez vous?

      Merci d'avance pour vos réponses

      Jérôme
      0
    2. Psyk974 Messages postés 559 Statut Membre 51 > Adony
       
      Bonjour

      $query = "SELECT * FROM #__members WHERE country > 'a' AND country =".$country." ORDER BY city, company";

      Il manquait les points autour de la variable $country

      Une autre chose : Tu dois modifier ça en fonction de comment tu récupères ta valeur... Je ne connais toujours pas ta base de données (SQL_SERVER, ORACLE ?)

      $country = $db->stderr() //$country reçoit le nom de ta country

      Cette ligne va bien mettre la valeur de country dans la variable $country ????
      0
    3. Adony > Psyk974 Messages postés 559 Statut Membre
       
      Bonjour Psyk974,

      Merci pour ta contribution.
      Voici le résultat que j'obtiens:
      Parse error: parse error in C:\wamp\www\components\com_members\members.php on line 37

      La ligne 37= $query = "SELECT * FROM #__members WHERE country > 'a' AND country =".$country." ORDER BY city, company";

      Je n'ai pas pu trouver de solution.
      Ma base de donnée est SQL_SERVER.
      As tu une idée de ce qui fais problème dans la synthaxe?
      Merci
      0
    4. Psyk974 Messages postés 559 Statut Membre 51 > Adony
       
      $query = 'SELECT * FROM #__members WHERE country > "a" AND country ='.$country.' ORDER BY city, company';

      Avec ça ça marche pas non plus ?
      0
    5. Adony > Psyk974 Messages postés 559 Statut Membre
       
      Non, ca ne marche pas
      Voici le résultat:

      Parse error: parse error in C:\wamp\www\components\com_members\members.php on line 37
      0
  2. Adony
     
    Bonjour Psyk,

    Merci pour ta suggestion.
    Le temps me manques ces jours-ci.

    Je vais mettre en oeuvre ta synthaxe et je te fais un compte rendu ce week-end.

    A bientôt
    0