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

Fermé
Adony - 10 févr. 2009 à 14:59
 Adony - 15 févr. 2009 à 12:31
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.

2 réponses

Psyk974 Messages postés 551 Date d'inscription lundi 2 février 2009 Statut Membre Dernière intervention 30 mars 2010 51
10 févr. 2009 à 17:00
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
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
Psyk974 Messages postés 551 Date d'inscription lundi 2 février 2009 Statut Membre Dernière intervention 30 mars 2010 51 > Adony
11 févr. 2009 à 05:01
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
Adony > Psyk974 Messages postés 551 Date d'inscription lundi 2 février 2009 Statut Membre Dernière intervention 30 mars 2010
11 févr. 2009 à 09:25
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
Psyk974 Messages postés 551 Date d'inscription lundi 2 février 2009 Statut Membre Dernière intervention 30 mars 2010 51 > Adony
11 févr. 2009 à 09:59
$query = 'SELECT * FROM #__members WHERE country > "a" AND country ='.$country.' ORDER BY city, company';

Avec ça ça marche pas non plus ?
0
Adony > Psyk974 Messages postés 551 Date d'inscription lundi 2 février 2009 Statut Membre Dernière intervention 30 mars 2010
11 févr. 2009 à 11:37
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
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