Regrouper en une seule requete

Eléphant du PHP | 78 Messages

17 juil. 2007, 20:01

Bonjour,

Je voudrais savoir si l'on pouvait passer plusieurs requete en une seule pour ensuite lire les résultats individuellement.

Bon le mieux c'est l'exemple :
J'ai une table qui regroupe des pièces à louer.
Chaque pièce occupe un champ différent.
Dans ces champ seulement 3 données possibles OUI (c'est loué) NON (ca ne l'est pas) PERSO (il l'a déjà). J'ai fait ca avec un formulaire type radio en fait, ce qui donne par exemple :
1e champ : Veste OUI
2e champ : Pantalon NON
3e champ : Fil OUI
etc...

Bon je voudrais maintenant faire des statistiques. Combien y a t'il de OUI dans le champ veste ? Le resultat correspond au nombre de veste louée.
Le problème c'est que je ne veux pas faire autant de tableaux qu'il n'y a de champs... Je veux plutot faire un tableau pour les oui avec dans chaque ligne les pièces et le nombre de pièces a coté.
Ce qui veut dire que je dois faire autant de requete qu'il n'y a de champs en une seule fois.

J'ai taté un peu partout mais je n'ai pas vraiment d'idée précise sur ce qu'il faudrait utiliser...
Est ce que qql a compris le problème et peut m'aider svp :)
Morkem

Mammouth du PHP | 991 Messages

17 juil. 2007, 20:05

Regarde du coté de la requete sql :

SELECT COUNT(un_nom_de_champ_de_ta_table) FROM ta_table WHERE le_champ_veste = 'oui'

Mais je pense que je n'ai pas bien compris ta question
DevOps, Symfony4, Hoa

Eléphant du PHP | 78 Messages

17 juil. 2007, 20:10

Oui ba ca c'est ce que j'aurais fait si j'avais fait un tableau Veste avec
[1e ligne] Oui : 30
[2e ligne] Non : 10
[3e ligne] Perso : 5

La en fait je veux un tableau Oui avec
[1e ligne] Veste : 30
[2e ligne] Pantalon : 40
[3e ligne] Fil : 50

Puis un tableau Non avec
[1e ligne] Veste : 10
[2e ligne] Pantalon : 5
[3e ligne] Fil : 10

Puis un tableau Perso...

Tu vois mieux ?? :)
Morkem

Mammouth du PHP | 991 Messages

17 juil. 2007, 20:53

Personnelement je ferais comme je te l ai dit meme si il y a un certain nombre de requete ,

Sinon il existe une autre solution est de recuperer avec une seul requete , de qui consiste a stocker le resultat dans un tableau puis ensuite de faire les opérations de traitement sur le tableau recuperer ... ce limitera en théorie le nombre de requete a ... 1

@+ je vais regarder Ncis ^^
DevOps, Symfony4, Hoa

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

17 juil. 2007, 21:05

D'après ce que je comprends, ce que tu appelles "tableau" sont les données résultant d'une requête ? Dans ce cas, le terme approprié est résultat. Chaque ligne de résultat est appellée justement ligne, et chaque colonne, colonne. Et pour être complet, une base de données est composée d'une ou plusieurs tables dont chaque entrée est appelée enregistrement. Donc si tu fais un "SELECT *" sur une table de 100 enregistrements, tu reçois un résultat de 100 lignes.

Bon, ça c'était pour le jargon.

Tu n'as pas posté dans le bon forum donc tu n'as pas eu droit aux rappels habituels, je te les recopie ici, merci de compléter ce que tu as oublié.
Rappel pratique - n'oubliez pas de :
  • suivre ces quelques conseils de débogage
  • préciser quel SGBD vous utilisez ainsi que sa version
  • utiliser les balises

    Code : Tout sélectionner

    [/b] et [b]
    [/b] pour afficher du SQL[/color]
  • poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (vous pouvez retirer les colonnes qui ne sont pas utilisées dans les requêtes problématiques)
  • si nécessaire, poster un échantillon des données
Pour le reste, je pense que la requête que tu cherches ressemble à

Code : Tout sélectionner

SELECT x, y, COUNT(*) FROM matable GROUP BY x, y
...où x et y sont les noms des colonnes contenant le type de pièce à louer et la valeur du bouton radio. À toi ensuite de formater ces résultats comme tu le souhaites, en PHP.

Eléphant du PHP | 78 Messages

17 juil. 2007, 22:57

Code : Tout sélectionner

CREATE TABLE `escrime_membres` ( `veste` varchar(20) collate latin1_general_ci NOT NULL default '0', `pantalon` varchar(20) collate latin1_general_ci NOT NULL default '0', `fil` varchar(20) collate latin1_general_ci NOT NULL default '0', .... INSERT INTO `escrime_membres` VALUES ('Non', 'Oui', 'Perso', '...); INSERT INTO `escrime_membres` VALUES ('Oui', 'Oui', 'Perso', '...); INSERT INTO `escrime_membres` VALUES ('Oui', 'Oui', 'Non', '...);
Voila la tables... elle est tout de mêmes tronqués vu qu'il y a 10 pièces à louer, je n'en ai mis que 3. Ces pièces ont chaques fois une des 3 réponses possibles OUI NON PERSO.

Bon je reprend. Moi j'avais fait ça :
<?php
$requete2 = mysql_query("SELECT veste, count(*) AS total2 FROM escrime_membres GROUP BY veste");
$total2 = array();

while ( $a_result = mysql_fetch_array($requete2) )
{
    $total2[ $a_result['veste'] ] = $a_result['total2'];
}
$oui = (empty($total2['Oui'])) ? 0 : $total2['Oui'];
$non = (empty($total2['Non'])) ? 0 : $total2['Non'];
$perso = (empty($total7['Perso'])) ? 0 : $total7['Perso'];

?>
Mais la ca me donne un tableau en html Veste. Il faudra refaire ca 9 fois pour tout afficher...
Donc moi ce que je voudrais c'est 3 tableau en html pour les 3 données (Oui, Non, Perso) avec les champs de la table comme ligne.

Donc j'ai 2 problèmes suite à ca :
1) Je ne trouve pas de requete sql adapté
2) Je ne trouve pas de code php pour afficher

J'avais déjà pensé a ce que m'a conseillé Hubert mais je ne trouve pas la syntaxe exacte car ca n'affiche rien.

Je bidouille sur phpmyadmin pour trouver la requete exacte mais je ne pense pas que ce soit ca que je veut car en fait il ne cherche par exemple qu'en fontion de la reponse du champ veste... Or moi je veux la totalité des réponses...
Morkem