Page 1 sur 1

compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 21:41
par maelinn
Bonjour !

Alors voila mon soucis : J'ai entré dans un champ les données checkbox d'un formulaire grâce à un implode. Les données récupérées sont séparées par des virgules dans le champ. Maintenant j'aimerais faire une moyenne du nombre de case cochées mais je ne sais pas comment m'y prendre.
Je n'arrive déjà pas à récupérer le nombre de chaines d'un champ alors si vous pouviez me donner des pistes. Je suppose qu'il faut que j'utilise les fonctions explode et count mais c'est très flou dans ma tête.

Merci !

Re: compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 21:48
par maelinn
J'avais essayé un truc comme ça mais ça me donne toujours un résultat à 0 :
 $nb_conv = explode(',', $nom_champ);
  echo count($nb_conv);

Re: compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 22:38
par moogli
salut,

peut tu nous fournir utiliser pour la génération du formulaire ?
connais tu array_sum ?

@+

Re: compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 22:54
par maelinn
Non, je ne connaissais pas. Je vais explorer de ce côté.

Comme demandé, mon code html :
 <label>
      <input type="checkbox" name="conv_UAC[]" value="BM" id="conv_UAC_0" />
      Buffy Memories</label>
    <br />
    <label>
      <input type="checkbox" name="conv_UAC[]" value="femmes" id="conv_UAC_1" />
      UJA : Femmes en série</label>
    <br />
    <label>
      <input type="checkbox" name="conv_UAC[]" value="QAF" id="conv_UAC_2" />
      Queer as Folks/The L world</label>
Et le code pour ecrire dans ma base :
	$conv_UAC = implode(",",$_POST['conv_UAC']);
Ma table renverra le champ UAC rempli comme suit si les 2 premiers sont cochés : BM,femmes
Je souhaiterais donc pouvoir récupérer le nombre de cases cochées (ici 2) puis faire une moyenne sur l'ensemble des entrées.

Re: compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 23:12
par moogli
fonction php count

quand a l'insertion dans la base elle n'est pas faite ici mais je suppose que tu doit savoir faire.

@+

Re: compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 23:17
par maelinn
Je ne comprends pas. A quoi dois-je appliquer la fonction count ? Et je ne veux pas renvoyer les données dans la bdd mais juste les afficher sur une page.

Re: compter le nombre de chaines d'un champ

Posté : 11 nov. 2010, 23:50
par Ryle
A mon avis, ton soucis est plus un problème de conception... Il n'est jamais bon de concaténer plusieurs valeurs dans un seul et même champ de ta base, cela rend tes données assez peu exploitables par le sgbd. Il vaut mieux créer une table supplémentaire dans laquelle tu stockeras chacune des valeurs. Cela te permet de facilement les comptabiliser, faire des sommes ou des moyennes, etc.

Quoi qu'il en soit, sans changer ta structure, il te faut effectivement faire un select pour récupérer la valeur de ta base, puis séparer les valeurs afin de pouvoir les compter (et pour ça explode et count fonctionnent très bien, faut juste t'assurer que ta variable $nom_champ contient bien ta valeur en base)

Re: compter le nombre de chaines d'un champ

Posté : 12 nov. 2010, 00:15
par maelinn
Oui je sais bien que renvoyer les données d'un tableau dans un champ c'est pas super :D Mais comme apres il aurait fallu que j'arrive à associer chaque id à la bonne entrée... Ca m'a paru un peu complexe.

Je vais continuer à chercher du cote de count et explode alors, merci :)

Re: compter le nombre de chaines d'un champ

Posté : 12 nov. 2010, 02:46
par maelinn
Bon, alors tout compte fait, j'ai crée une 2e table et fait une jointure. Mon problème maintenant est certainement tout bête mais bon...

J'ai une table sondage et une autre conventionsUAC
Je voudrais afficher toutes les entrées ou le champ femmes (de la 2e table) contient l'entrée femmes.

J'ai fait une requête comme ceci :
 $retour = mysql_query('SELECT * FROM sondage, conventionsUAC WHERE id = id_UAC AND femmes = femmes');
mais ça me renvoie toutes les entrées. Donc comment dire que je ne veux plus faire correspondre 2 champs de 2 tables différentes, mais les entrées d'un champ ?

Re: compter le nombre de chaines d'un champ

Posté : 12 nov. 2010, 03:09
par moogli
salut,

c'est pas clair ton affaire

$retour = mysql_query('SELECT * FROM sondage, conventionsUAC WHERE id = id_UAC AND femmes = femmes');

vue que femmes est un champ la tu indique que tu souhaite que le champs femmes soit égale au champs femmes ce qui est toujours vrai (ben oui il est toujours égale à lui même ...) idem pour id ^^

a vue de nez la correction serais
$retour = mysql_query('SELECT * FROM conventionsUAC as c inner join sondage on s.id = id_UAC where femmes = \'femmes\';');
en espérant que tu n'ai pas deux champs appelé femmes

Parce que pour un sgdb comme pour php il faut "encapsuler" les chaines de caractères.

ensuite je dirais simplement le select * c'est le mal, il est préférable d'indiquer clairement le nom des champs. Pourquoi ?
Parce que les 3/4 du temps on n'utilise qu'un champs de la table et on en récupère 500 (de préfèrence des bien gros). Ensuite parce que c'est plus claire à la relecture, on sais ce que tu veut avec la requete.

Pour

@+

Re: compter le nombre de chaines d'un champ

Posté : 12 nov. 2010, 10:17
par Ryle
Tu peux aussi préfixer les champs par le nom de la table (ou un alias) dans ton WHERE, afin de préciser à quel champ tu fais référence. Ex :
SELECT ...
FROM nom_de_ma_table1, nom_de_ma_table2 alias_t2
WHERE nom_de_ma_table1.mon_champ_de_ma_table1 = alias_t2.mon_champ_équivalent_de_ma_table2

Avec ce type de jointure ou le inner join, il ne te retournera que les enregistrements de ta première table qui ont une correspondance dans la seconde (Nota : par contre il va te retourner autant de résultats qu'il y a de correspondances, pour une même entrée, mais ça se filtre ensuite avec php :))

Pour

@+
il était temps d'aller dormir ;)