Page 1 sur 2
Count avec variable
Posté : 02 mai 2016, 17:27
par yoann38
Salut à tous.
Je cherche à afficher le nombré d'événement par catégorie selon une région.
J'ai fait donc ceci:
SELECT id_type_loisirs,COUNT(*) FROM loisirs GROUP BY id_type_loisirs
Ca me renvoi le total, j'aimerais maintenant uniquement les résultat de la région sur laquelle se trouve l'internaute.
Je récupère ca avec :
$_REQUEST['region']
Comment combiné le tt svp ?
Merci encore
Re: Count avec variable
Posté : 02 mai 2016, 18:15
par Ascla
Bonjour,
Il suffit d'effectuer une concaténation et d'ajouter une CLAUSE WHERE. Ça donnera quelque chose du genre :
$requere = "SELECT id_type_loisirs,COUNT(*) FROM loisirs WHERE region=".$_REQUEST['region']." GROUP BY id_type_loisirs";
Re: Count avec variable
Posté : 02 mai 2016, 19:41
par yoann38
Ca ne marche pas je ne vois pas pourquoi ?
$region_id = !empty($_REQUEST['region']) ? regionByUrl($_REQUEST['region']) : NULL;
$count = array();
$liste = ("SELECT id_type_loisirs,COUNT(*) FROM loisirs WHERE id_region = ".$region_id." GROUP BY id_type_loisirs");while($row = $liste->fetch(PDO::FETCH_ASSOC))
$req = $bdd->query($liste);
$nb = $req->rowCount();
while($row = $liste->fetch(PDO::FETCH_ASSOC)) {
$count[$row['id_type_loisirs']] = $row['nb'];
}
Fatal error: Call to a member function fetch()
Re: Count avec variable
Posté : 02 mai 2016, 20:00
par Genova
Code : Tout sélectionner
$liste = ("SELECT id_type_loisirs,COUNT(*) FROM loisirs WHERE id_region = ".$region_id." GROUP BY id_type_loisirs");
?
Re: Count avec variable
Posté : 02 mai 2016, 20:31
par yoann38
J'ai corrigé un peu:
Mais ça m'affiche le meme resultat de partout et non par catégorie ....
$region_id = !empty($_REQUEST['region']) ? regionByUrl($_REQUEST['region']) : NULL;
$req = $bdd->query("SELECT id_type_loisirs,COUNT(*) as total FROM loisirs WHERE id_region = ".$region_id." GROUP BY id_type_loisirs " );
while($row = $req->fetch(PDO::FETCH_ASSOC)) {
$donnees = $req->fetch();
$req->closeCursor();
}
asort($aLoisirs);
foreach($aLoisirs as $k => $v) {;
// Si il y a un loisir de renseignée et aucune page demandée
if (!empty($_REQUEST['loisir']) && empty($_GET['page']) ) {
echo '<li><a href="'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$donnees['total'].'</span></li>'."\n";
}
// Si il y a une page de renseignée
else if(!empty($_GET['page']) && !empty($_REQUEST['loisir'])){
echo '<li><a href="'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$donnees['total'].'</span></li>'."\n";
}
else{
// Si il n y a pas de region de renseignée
echo '<li><a href="'.$_REQUEST['region'].'/'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$donnees['total'].'</span></li>'."\n";
}
}
?>
Re: Count avec variable
Posté : 02 mai 2016, 20:54
par yoann38
C'est bon, une pause et un café et hop

Merci
<?php
echo $region_id = !empty($_REQUEST['region']) ? regionByUrl($_REQUEST['region']) : NULL;
$liste = $bdd->query("SELECT id_type_loisirs,COUNT(*) as nb FROM loisirs WHERE id_region = ".$region_id." GROUP BY id_type_loisirs " );
while($row = $liste->fetch(PDO::FETCH_ASSOC)) {
$count[$row['id_type_loisirs']] = $row['nb'];
}
asort($aLoisirs);
foreach($aLoisirs as $k => $v) {;
$nb = array_key_exists($k, $count) ? $count[$k] : 0;
// Si il y a un loisir de renseignée et aucune page demandée
if (!empty($_REQUEST['loisir']) && empty($_GET['page']) ) {
echo '<li><a href="'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
// Si il y a une page de renseignée
else if(!empty($_GET['page']) && !empty($_REQUEST['loisir'])){
echo '<li><a href="'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
else{
// Si il n y a pas de region de renseignée
echo '<li><a href="'.$_REQUEST['region'].'/'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
}
?>
Re: Count avec variable
Posté : 02 mai 2016, 23:06
par yoann38
Donc mon code marche bien mais j'aimerais juste affiché les catégories quand le total de celle ci est supérieur ou égal à 1
Si il y a plus d'une entrée de cette catégorie tu l'affiche sinon tu passe ton chemin en gros...
Merci à vous pour votre aide
<?php
$liste = $bdd->query("SELECT id_type_loisirs,COUNT(*) as nb FROM loisirs WHERE id_region = ".$region_id." AND `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 GROUP BY id_type_loisirs " );
while($row = $liste->fetch(PDO::FETCH_ASSOC)) {
$count[$row['id_type_loisirs']] = $row['nb'];
}
asort($aLoisirs);
foreach($aLoisirs as $k => $v) {;
$nb = array_key_exists($k, $count) ? $count[$k] : 0;
// Si il y a un loisir de renseignée et aucune page demandée
if (!empty($_REQUEST['loisir']) && empty($_GET['page']) ) {
echo '<li><a href="'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
// Si il y a une page de renseignée
else if(!empty($_GET['page']) && !empty($_REQUEST['loisir'])){
echo '<li><a href="'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
else{
// Si il n y a pas de region de renseignée
echo '<li><a href="'.$_REQUEST['region'].'/'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
}
?>
Re: Count avec variable
Posté : 05 mai 2016, 12:09
par yoann38
Il y a une condition a rajouté if >= 1 je suppose quelque part mais ou et comment svp ?
Re: Count avec variable
Posté : 05 mai 2016, 23:18
par Ryle
Bonsoir,
Effectivement, il te suffit d'un COUNT(*) >= 1 dans une clause HAVING de ta requête

Re: Count avec variable
Posté : 07 mai 2016, 13:28
par yoann38
c'est à dire ?
Re: Count avec variable
Posté : 07 mai 2016, 18:29
par Ryle
Ben..... qu'il te faut une clause HAVING à ta requête ... dans laquelle tu feras ton COUNT(*) >= 1
https://dev.mysql.com/doc/refman/5.0/en ... dling.html
Re: Count avec variable
Posté : 07 mai 2016, 18:43
par or 1
en faisant le if en php, on gère l'affichage des 2 cas. avec le having, on aura plus qu'un cas pour le résultat de la requête.
Re: Count avec variable
Posté : 10 mai 2016, 16:40
par yoann38
Heu dans mon cas comment dois je faire du coup ?
Le but étant d'afficher uniquement si c'est supérieur ou egal à 1 en gros
// Si il n y a pas de ville de renseignée
if (empty($_REQUEST['ville'])) {
$liste = $bdd->query("SELECT id_type_loisirs,COUNT(*) as nb FROM loisirs WHERE id_region = ".$region_id." AND `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 GROUP BY id_type_loisirs " );
while($row = $liste->fetch(PDO::FETCH_ASSOC)) {
$count[$row['id_type_loisirs']] = $row['nb'];
}
asort($aLoisirs);
foreach($aLoisirs as $k => $v) {;
$nb = array_key_exists($k, $count) ? $count[$k] : 0;
// Si il y a un loisir de renseignée et aucune page demandée
if (!empty($_REQUEST['loisir']) && empty($_GET['page']) && empty($_REQUEST['region']) && empty($_REQUEST['departement'])) {
echo '<li><a href="activite-'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
// .....
Merci encore
Re: Count avec variable
Posté : 11 mai 2016, 11:18
par Ryle
Au risque de me répéter, dans ton cas, tu dois ajouter une clause HAVING à ta requête, dans laquelle tout ce que tu as à spécifier c'est COUNT(*) >= 1
http://www.lmgtfy.com/?q=clause+having+en+sql
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING COUNT(*) >= 1
Re: Count avec variable
Posté : 12 mai 2016, 07:10
par yoann38
Alors j'ai suivi tes conseils et j'en suis donc à:
if (empty($_REQUEST['ville'])) {
$liste = $bdd->query("SELECT id_type_loisirs,COUNT(*) as nb FROM loisirs WHERE id_region = ".$region_id." AND `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 GROUP BY id_type_loisirs " );
$liste .= " GROUP BY id_type_loisirs HAVING nb >= 1 ORDER BY nb DESC LIMIT 0,30";
while($row = $liste->fetch(PDO::FETCH_ASSOC)) {
$count[$row['id_type_loisirs']] = $row['nb'];
}
asort($aLoisirs);
foreach($aLoisirs as $k => $v) {;
$nb = array_key_exists($k, $count) ? $count[$k] : 0;
// Si il y a un loisir de renseignée et aucune page demandée
if (!empty($_REQUEST['loisir']) && empty($_GET['page']) && empty($_REQUEST['region']) && empty($_REQUEST['departement'])) {
echo '<li><a href="activite-'.simplification(strtolower($v)).'.html">'.$v.'</a><span class="subDropdown plus">'.$nb.'</span></li>'."\n";
}
Mais une erreur se produit:
Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp\www\digital\list.php on line 978
cette ligne correspond à :
$liste .= " GROUP BY id_type_loisirs HAVING nb >= 1 ORDER BY nb DESC LIMIT 0,30";
Quel est le problème ?
Merci encore