Requetes Mysql

Résolu
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012 - 8 juil. 2012 à 22:48
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012 - 26 juil. 2012 à 20:03
Bonjour,

J'essaie depuis quelques temps de trouver le moyen de créer un tableau divisé catégories/sous catégories de ce genre la:
___________________________________________________________
Type..................nbre ds le mois.......nbre dans l'année
___________________________________________________________
type1.................16.......................60
...element1...........5........................xx
...element2...........5........................xx
...element3...........6........................xx
type2.................30.......................55
...element4...........10.......................xx
...element5...........10.......................xx
...element6...........10.......................xx

J'ai essayé de faire une requête dans ce genre là pour le mois en cours mais ça ne fonctionne pas:
TYPE DE MATERIEL |
<?php echo $moislettre ?> |
CUMUL <?php echo $annee ?> |

<?php
require_once('../php/connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
//Requete permettant l'affichage du tableau d'occupation via la table correctif
$reqmateriel=mysql_query(\"SELECT id,c.ensemble,COUNT(c.element) AS NBRE_ELEMENT,c.element,w.debut_inter FROM correctif AS c LEFT JOIN work_times AS w ON c.id = w.intervention_id WHERE MONTH(w.debut_inter)=$mois AND YEAR(w.debut_inter)=$annee GROUP BY c.ensemble,c.element ORDER BY c.ensemble,c.element\");
while ($datas = mysql_fetch_assoc($reqmateriel)) {
?>
----

<?php echo $datas['element'];?>,
<?php echo $row['NBRE_ELEMENT'];?>,
<?php ?>,
<?php } ?>


Les variables $mois et $annee sont défini plus haut et sont ok car elles sont utilisées par d'autres requêtes.

J'espère que quelqu'un pourra m'aider parce que je trouve pas et en plus je trouve personnes qui aurait eu le même problème

Merci d'avance

maxredphenix

41 réponses

maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
18 juil. 2012 à 07:18
Bonjour,

Bon je cherche toujours j'avoue que j'ai un peu de mal avec ta solution, je retourne vers ce que j'ai fais de temps en temps, voir en ce moment je tente de faire des UNION au cas ou:
<?php
require_once('connexionbdd.php'); // Connexion à mysql via le fichier connexion.php				
$reqEnsemble=mysql_query("SELECT c.ensemble AS ENSEMBLE, d.date_appel, COUNT(c.element) AS NBRE_ELEMENT_ANNEE
FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id 
WHERE YEAR(d.date_appel)=$annee 
UNION
SELECT c.ensemble AS ENSEMBLE, d.date_appel, COUNT(c.element) AS NBRE_ELEMENT_MOIS
FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id 
WHERE MONTH(d.date_appel)=$mois AND YEAR(d.date_appel)=$annee
GROUP BY ENSEMBLE ORDER BY ENSEMBLE");	
while ($req1 = mysql_fetch_assoc($reqEnsemble)) { 
echo '<tr>';
echo '<td align="left" style="background-color:yellow">'.htmlentities($req1['ENSEMBLE']).'</td>';
echo '<td align="center">'.htmlentities($req1['NBRE_ELEMENT_MOIS']).'</td>';
echo '<td align="center">'.htmlentities($req1['NBRE_ELEMENT_ANNEE']).'</td>';
echo '</tr>';
$ensemble = mysql_real_escape_string($req2['ENSEMBLE']);
$reqElement=mysql_query("SELECT c.idCorrectif, c.ensemble AS ENSEMBLE, COUNT(c.element) AS NBRE_ELEMENT_ANNEE, c.element AS ELEMENT, d.date_appel 
FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id 
WHERE YEAR( d.date_appel )=$annee AND ENSEMBLE = '$ensemble_annee' 
GROUP BY ELEMENT ORDER BY ENSEMBLE
UNION
SELECT c.idCorrectif, c.ensemble AS ENSEMBLE, COUNT(c.element) AS NBRE_ELEMENT_MOIS, c.element AS ELEMENT, d.date_appel 
FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id 
WHERE MONTH( d.date_appel )=$mois AND YEAR( d.date_appel )=$annee AND ENSEMBLE = '$ensemble'");
while ($req2 = mysql_fetch_assoc($reqElementAnnee)) {
echo '<tr>';
echo '<td align="right">'.htmlentities($req2['ELEMENT']).'</td>';
echo '<td align="center">'.htmlentities($req2['NBRE_ELEMENT_MOIS']).'</td>';
echo '<td align="center">'.htmlentities($req2['NBRE_ELEMENT_ANNEE']).'</td>';
echo '</tr>';
}
}
?>


Mais c'est pas pour autant que ça fonctionne . Sinon je planche depuis quelque temps sur ce petit souci, j'ai un select qui me sert à récupérer des valeurs dans ma base de donnée mysql pour créer les éléments dans mon formulaire. Je voudrais m'en servir aussi pour mon formulaire de visualisation, tout en gardant les valeurs de la base de donnée pour pouvoir éditer mon enregistrement si besoin. J'ai donc se code qui me sert de création:

<label for="type_element">Element: </label>
<?php
echo '<SELECT NAME="type_element" ID="type_element">';
mysql_query("SET NAMES UTF8");
require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
$reponse = mysql_query("SELECT type_element FROM element ORDER BY type_element") or die(mysql_error);
while ($result = mysql_fetch_array($reponse)){
echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
}
echo "</select>";
?>





J'ai tenter pas mal de chose au dessus du while, à l'intérieur:
echo '<SELECT NAME="type_element" ID="type_element" value="<?php echo $datas['type_element'];?>">';

echo '<SELECT NAME="type_element" ID="type_element" value="echo $datas['type_element'];">';


mais à chaque fois cela me créer une erreur (alors que le echo est bon parce que si je le place dans un input ça m'affiche la valeur) et je trouve personne qui aurait fait une double requête dans un select sur le net. SI au cas ou tu serais ça m'arrangerais beaucoup.

Passe une bonne journée et à bientôt.

maxredphenix
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
18 juil. 2012 à 21:11
Pour le SELECT :
<?php
require_once('../connexionbdd.php'); //Connexion à MySQL
mysql_query("SET NAMES UTF8"); //à mettre dans 'connexionbdd.php' directement

function displayComboTypeElement()
//Je l'ai séparé au cas où tu voudrais l'utiliser ailleurs aussi. Dans ce cas, 
//colle ça dans un fichier séparé et inclus-le dans les scripts qui en ont besoin.
{
echo("<label>Element: \n<SELECT NAME="type_element" id="type_element">\n");
$rs = mysql_query("SELECT type_element FROM element ORDER BY type_element");// or die(mysql_error); INUTILE
while ($row = mysql_fetch_array($rs))
echo "<option value="{$row[0]}">{$row[0]}</option>\n";
echo "</select>
\n";
}

displayComboTypeElement();


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
18 juil. 2012 à 21:12
Erreur de ma part :
echo "</select></label>
\n";


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
18 juil. 2012 à 21:41
Bonsoir,

Tout d'abord merci pour ta réponse.

J'ai pas encore l'habitude de créer mes formulaires de cette manière, faudrait que je commence à faire comme ça c'est plus lisible et plus pratique et réutilisable. Par contre, si j'ai bien compris cela revient au même que celui que j'ai déjà non?:
<label for="type_element">Element: </label>
<?php
echo '<SELECT NAME="type_element" ID="type_element">';
mysql_query("SET NAMES UTF8");
require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
$reponse = mysql_query("SELECT type_element FROM element ORDER BY type_element") or die(mysql_error);
while ($result = mysql_fetch_array($reponse)){
echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
}
echo "</select>";
?>




Je pense que j'ai du mal m'expliquer, pas grave ça m'arrive souvent . Comment je peux faire pour rajouter un autre echo dont la valeur est celle du resultat d'une autre requête, ex:
// code précédent, on récupère l'id via la methode get
$reponse=mysql_query("SELECT * FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id WHERE c.idCorrectif=$id");
while ($datas = mysql_fetch_assoc($reponse)) {

<label for="type_element">Element: </label>
<?php
echo '<SELECT NAME="type_element" ID="type_element">';
mysql_query("SET NAMES UTF8");
require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
$reponse = mysql_query("SELECT type_element FROM element ORDER BY type_element") or die(mysql_error);
echo "<OPTION value='<?php echo $datas['type_element']?>' selected><?php echo $datas['type_element']?></OPTION>"; // Ligne me servant à mettre par défaut la valeur de l'élément qui à été enregistrer dans ma table
while ($result = mysql_fetch_array($reponse)){
echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
}
echo "</select>";
?>



}


Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
18 juil. 2012 à 21:48
Je viens de voir que tu as répondu à mon souci de tableau d'affichage ensemble + element, je vais jeter un oeil à tout ça.

Merci et passe une bonne soirée
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
18 juil. 2012 à 21:59
Regarde bien, le code que j'ai proposé n'est pas exactement le même (il devrait même fonctionner )...
Dans le code que tu viens de me donner, il ne faut pas se reconnecter en plein milieu de la boucle !
Une fois que la connexion est établie au début du script, tu peux lancer autant de requêtes que tu veux.
mysql_query("SET NAMES UTF8"); se fait juste après mysql_connect. Ca devrait même se trouver dans ta fonction qui fait la connexion.

Ce que je faisais avant de passer à PDO, c'était que j'avais un fichier libMain.php (bibliothèque de fonctions principale)
inclus dans chaque script (via require_once, comme tu le fais déjà) qui ouvrait la BDD et initialisait la session.
Comme ça, plus besoin de s'occuper de ça dans mes scripts (juste une lib à inclure)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
18 juil. 2012 à 22:08
Tu veux positionner par défaut le combobox de chaque ligne de ta table ?
On dirait que tu t'emmêles un peu les pinceaux, là...

Le plus simple (et modulaire, et élégant, et...) c'est de travailler en fonctions, comme je l'ai fait.
Euh la table element, elle contient quoi ? Un ID et une chaine de caractères ?
Si oui, il faudra ajouter un paramètre selected à la fonction displayComboTypeElement et
mettre dans l'attribut value de chaque <option> l'ID et non la valeur (pour pouvoir, dans la boucle,
comparer l'ID de la ligne qu'on ajoute avec l'option sélectionnée et ajouter l'attribut HTML selected en conséquence)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
18 juil. 2012 à 22:33
Je suis en train de regarder ton code pour mon tableau, encore merci.

Sinon pour le require_once j'avais déjà mis le mysql_query("SET NAMES UTF8"); mais à force je faisais même pas attention au faite que j'avais laisser un require_once pour chacun de mes combobox de mes formulaires donc je viens d'épurer tout cela (quand même 40 lignes enlever en tout et en plus ça fait 20 require en moins c'est pas mal pour les performances ça. ). J'ai fait pareil que toi pour les sessions j'ai fait un fichier à part et un appel en haut de chaque page par require c'est sur c'est plus pratique.

En faite pour résumer, j'ai mon combobox dans mon formulaire de création de demande. Ensuite tout est affiché dans un tableau (utilisant jquery datatable) dans lequel j'ai rajouté une icone d'édition qui me récupère d'id de la ligne sélectionner et m'ouvre une page de visualisation/édition (dont le début de code est celui de mon post de 21h45, recup de GET id et requête).

J'ai ainsi tous mes champs utilisés pour l'enregistrement de mes données qui apparaissent et qui se remplissent avec les infos contenu dans la ligne correspondante:
<label for="id_correctif">N°: </label>
"/>



Pour ce qui est du combo, je voudrais afficher la valeur de l'élément qui à été choisi et enregistré dans ma ligne (via le formulaire) à l'intérieur du combo (en valeur par défaut: selected) mais aussi pouvoir le modifier donc j'ai besoin de faire à un appel à la table élément qui contient (id et type_element (le nom de l'élément)).

Après lors de l'enregistrement dans la table correctif, cela se fait à l'intérieur d'un champ nommé "element" (idem pour les ensembles utiliser pour mon tableau), je n'ai pas fait de jointure avec l'id de la table élément mais juste un enregistrement dans correctif.element de la valeur sélectionnée dans le select soit element.type_element.

J'espère ne pas t'avoir perdu

Merci à toi et au temps que tu me consacres
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
18 juil. 2012 à 22:38
Après pour ce qui est des protection, c'est super ce que tu m'as donné pour les requêtes sql, je pensais regarder tout cela une fois que tout serais fonctionnel mais vu comme ça c'est mieux
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 juil. 2012 à 19:08
"<?php echo $datas['idCorrectif'];?>" />


N'oublie pas l'espace avant le /> ...
Pour info, data n'est jamais au pluriel (vu qu'à l'origine, c'en est déjà un)
En latin, dare "donner" -> datum "ayant été donné" (au neutre) -> data "ayant été donnés"


Reprends ma fonction, y'a en gros deux lignes à rajouter pour que ça fonctionne...
C'est en forgeant qu'on devient forgeron, comme le dit l'adage.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
19 juil. 2012 à 20:14
Bonjour,

C'est bon j'ai adapter ton code pour l'adapter à ce dont j'avais besoin, il me reste juste à régler la mise en forme vu que le label se met au dessus du combo et non l'un à côté de l'autre mais c'est un léger problème.

Sinon je cherche toujours le moyen de créer ce fichu tableau mais j'avoue que j'ai du mal. Je cherche le moyen de faire faire ce que tu m'as dit mais....
c'est simple à adapter : au lieu de faire un echo de l'ensemble directement, mettre ça
(ce qui est entre le premier while et le $ensemble=) dans une chaine en prenant
soin d'ajouter une colonne contenant par exemple {nbreAnnée} que tu remplaceras ensuite
par la valeur de la variable qui contiendra la somme (calculée dans le second while).


Passe une bonne soirée et merci pour le combo, je vais pouvoir faire cela pour tout les combo de ma page de visualisation
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
19 juil. 2012 à 20:20
Bon ba voila le défaut est corrigé, il manquait le </label>
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
22 juil. 2012 à 11:42
Bonjour,

Je suis désolé, j'ai réussi à résoudre pas mal de soucis sur mon programme mais j'arrive toujours pas à faire le tableau, est-ce que tu pourrais m'aider s'il te plait?

D'ailleurs j'ai corrigé pas mal de page suite à certain de tes conseils, notamment le require_once de ma page de connexion à la bdd et j'ai des pages plus rapide maintenant. Merci

Passe un bon week end et encore merci
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
22 juil. 2012 à 14:37
Dans ta boucle principale :
$ensemble = "<tr><td>[...]</td><td>{ct1}</td><td>{ct2}</td>\n";
$ct1=0; $ct2=0;
while ()
{
//incrémente comme il faut les compteurs
}
$ensemble = str_replace('{ct1}', $ct1, $ensemble);
$ensemble = str_replace('{ct2}', $ct2, $ensemble);
echo $ensemble;


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
22 juil. 2012 à 21:52
Merci pour ta réponse,

Je vais regarder comment faire avec ce que tu m'as donné.

Merci et passe une bonne soirée
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
23 juil. 2012 à 22:02
Bonsoir,

Tu vas me trouvé chiant, mais j'arrive vraiment pas à créer ce tableau. J'ai du mal à comprendre ce qu'il faut faire.

Quant tu dis incrémente les compteurs, c'est de la requête pour connaitre la valeur total des ensembles par mois, donc incrémenter le mois dans la variable?

J'en ai profité pour relire mes bouquins sur le php avant de te poster cette réponse au cas ou, mais cela ne change rien je vois vraiment pas ce qu'il faut faire. Désolé

maxredphenix
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 juil. 2012 à 22:16
Dans la petite boucle,
$ct1+=$petiteRequete['nombreMois']; $ct2+=$petiteRequete['nombreAnnee'];

Pas compliqué...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
24 juil. 2012 à 21:32
Merci,

je vais regarder tout ça.
0
maxredphenix Messages postés 58 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 novembre 2012
26 juil. 2012 à 18:58
Bonsoir,

Bon j'ai vraiment du mal à créer ce tableau, je pense qu'il va falloir que je relise tous mes livres. Tu sais quoi je pense que j'ai pas encore la logique pour ce type de programmation, je vais abandonné pour le moment et me remettre à apprendre

Encore merci pour ton aide et le temps que tu m'as consacré.

Passe une bonne soirée et à bientôt

maxredphenix
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
26 juil. 2012 à 19:51
Okay. N'hésite pas, si t'as d'autres questions, à les poser dans un autre thread
(sauf si c'est la suite de celui-ci, bien sûr )

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Rejoignez-nous