[RESOLU] SImplification de requete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] SImplification de requete

Re: SImplification de requete

par mr-frey-day » 01 déc. 2017, 12:39

Merci à toi pour cette aide que tu m'a apporté,
j'ai fini par y arriver.

voici donc mon code final :
					<?php 
					$reponse = $bdd->query('SELECT date_newletter, COUNT(*) AS nb FROM newletter GROUP BY date_newletter ORDER BY date_newletter');
					
					$mois_actif = array();
					while ($data = $reponse->fetch()) 
					 {
						$mois_actif [$data['0']] = $data['1'];
					 }
					
					for ($mois = 1; $mois <= 12; $mois++){
					if ($mois<10) {
					$mois="0".$mois;
					}
					$count17 = 'count_17_'.$mois;
					
					if (array_key_exists('2017-'.$mois.'-01', $mois_actif)) {
						${"count_17_" . $mois} = 1;
					}
					else {
						${"count_17_" . $mois} = 0;
						}
					}
					?>

Re: SImplification de requete

par @rthur » 30 nov. 2017, 19:38

Dans l'ordre, voila comment je le ferai :
- Il faut que tu fasses d'abord ta requête SQL
- Ensuite tu construits un tableau avec pour chaque ligne de résultat avec la date en clé du tableau => la valeur
- Enfin tu fais une boucle de 1 à 12 dans laquelle tu testes avec array_key_exists() si tu as la valeur dans ton tableau précédent, si c'est le cas tu l'affiches, sinon tu affiches 0

A toi de développer chaque brique fonctionnelle une par une, et quand chacune marchera tu les assembles :)

Re: SImplification de requete

par mr-frey-day » 30 nov. 2017, 15:49

Je tente depuis ce matin de faire un bout de code mais n'y arrivant pas, je reviens ici.
faut pas trop m'en vouloir, c'est la première fois que je tente ce genre de code

j'ai réussi à faire cela, bon cela boucle plusieurs fois mais je n'arrive pas à garder les variables accessibles
$reponse = $bdd->query('SELECT date_newletter, COUNT(*) AS nb FROM newletter GROUP BY date_newletter ORDER BY date_newletter');
while ($data3 = $reponse->fetch())
						 {?>

							<?php
							for ($mois = 1; $mois <= 12; $mois++){
							if ($mois<10) {
							$mois="0".$mois;
							}
							
							$count17 = 'count_17_'.$mois;
							echo $count17 .' <br />';
						if('2017-'.$mois.'-01'== $data3['0']) { $count17 = 1;} else {$count17 = 0;} 
						echo $data3['0'].': n°' . $mois .' : '. $count17 .' <br />';
						}
				}
mon but étant de determiné les mois où il y a une news pour la suite du code qui se composerai comme ceci
<?php 
						if(($count_17_12)==0)
						{ ?>
							<li class="<?php if ($tab == '12' ) { echo 'current'; } ?> li-tabsnews vide"><a href="#tab-2017-12">Déc.</a></li>
						<?Php
						}
						else
						{ ?>
							<li class="<?php if ($tab == '12' ) { echo 'current'; } ?> li-tabsnews"><a href="#tab-2017-12">Déc.</a></li>
						<?php	
						}
						?> 

Re: SImplification de requete

par @rthur » 30 nov. 2017, 11:55

Pas avec une requête SQL vu que ces enregistrements n'existent pas.
Mais en revanche, c'est facile en PHP, tu fais juste une boucle for sur tous les jours du mois, et dans ta boucle tu affiches le résultat de la requête précédente si il existe, sinon, tu affiche 0

Re: SImplification de requete

par mr-frey-day » 30 nov. 2017, 11:45

petite question, peut-on obtenir les lignes qui sont à zero aussi?
cela m'aiderai pour l'affichage que je souhaiterai faire.

Re: SImplification de requete

par @rthur » 30 nov. 2017, 11:13

Erreur de ma part : le ORDER BY doit être en dernier

Re: SImplification de requete

par mr-frey-day » 30 nov. 2017, 10:51

Bonjour,

En essayant ta requête dans phpmyadmin, j’obtiens une erreur :
#1064 - Erreur de syntaxe près de 'GROUP BY date_newsletter' à la ligne 1

Re: SImplification de requete

par @rthur » 29 nov. 2017, 19:00

Bonjour,

En utilisant un COUNT() et surtout un GROUP BY directement dans ta requête SQL.

Exemple à tester dans phpmyadmin :
SELECT date_newsletter, COUNT(*) AS nb FROM newsletter WHERE 1 ORDER BY date_newsletter GROUP BY date_newsletter

SImplification de requete

par mr-frey-day » 29 nov. 2017, 18:00

Bonjours à toutes et tous,

je pense qu'il y a moyen de simplifié mes multiples requêtes pour n'en faire qu'une, mais je sais pas trop comment m'y prendre.
le but étant de compter le nombre d'entrées par mois et ensuite de les afficher plus tard.

Voici ma grosse requête :
$reponse0117 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-01-01" ORDER BY id_newletter DESC');
$count0117 = $reponse0117->rowCount();
$reponse0217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-02-01" ORDER BY id_newletter DESC');
$count0217 = $reponse0217->rowCount();
$reponse0317 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-03-01" ORDER BY id_newletter DESC');
$count0317 = $reponse0317->rowCount();
$reponse0417 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-04-01" ORDER BY id_newletter DESC');
$count0417 = $reponse0417->rowCount();
$reponse0517 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-04-01" ORDER BY id_newletter DESC');
$count0517 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-05-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-06-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-07-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-08-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-09-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-10-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-11-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();
$reponse1217 = $bdd->query('SELECT * FROM newletter WHERE date_newletter = "2017-12-01" ORDER BY id_newletter DESC');
$count1217 = $reponse1217->rowCount();