Condition assez complexe

Snipefire
Invité n'ayant pas de compte PHPfrance

12 juin 2007, 17:31

Bonjour à tous,
Voila je ne sais pas trop comment m'y prendre.

J'ai une table équipe avec un des champs : id_champ (championnat).

J'aimerais compter le nombre d'entrée qu'il y a pour chaque id_champ existant, et à chaque fois que id_champ < 8 créer le nombre adéquat d'équipe pour qu'il y en ai 8 avec le même id_champ.

J'arrive pas trop a faire la liaison condition boucle requête sur ce coup la :oops:

Si vous avez aps compris (j'imagine que c'est pas très clair quant on a pas les tables devant soi, n'hésitez pas afin que j'explique plus clairement.

Merci d'avance pour votre aide;
Bonne soirée

Eléphant du PHP | 199 Messages

12 juin 2007, 17:36

Je dirais ceci (peut-être qu'il y a plus simple) :
<?php
  $request = mysql_query("SELECT id_champ FROM equipe");
  $array = array();
  while ($fetch = mysql_fetch_assoc($request)) array_push($array,$fetch['id_champ']);
  $countValues = array_count_values($array);

  foreach ($array AS $value)
  {
     if ($countValues[$value] < 8) { Blablabla }
  }
Klomac - Blog Lambda

ViPHP
ViPHP | 5924 Messages

12 juin 2007, 18:07

Les serveurs SQL ont des fonctions, il faut les utiliser :
  $request = mysql_query("SELECT id_champ, COUNT(*) AS cnt FROM equipe GROUP BY id_champ");

  while($fetch = mysql_fetch_assoc($request))
  {
     while($fetch['cnt'] < 8)
     {
        Blablabla
        $fetch['cnt']++;
     }
  } 

Eléphant du PHP | 332 Messages

13 juin 2007, 09:36

La solution de Sékiltoyai te donne une piste intéressante à suivre.

Toutefois, attention : si le code qu'il décrit comme blablabla consiste à insérer des enregistrements puisque te tu parles de "compléter à 8", il faut créer une deuxième connexion à la base de données et l'utiliser pour ces instructions "Insert into equipes ...".

Eléphant du PHP | 206 Messages

13 juin 2007, 14:16

Merci pour vos réponses, je vais regarder ça dans l'après midi, et je vous tiens au courant. :)

ViPHP
ViPHP | 5924 Messages

13 juin 2007, 15:42

il faut créer une deuxième connexion à la base de données et l'utiliser pour ces instructions "Insert into equipes ...".
Non, pas une deuxième connexion, tu peux très bien faire plusieurs requètes sur une même connexion sans influer sur le résultat des autres. Il faut juste prévoir plusieurs ressources résultats dans le cas de plusieurs requètes SELECT.
Sinon, au passage, si tu as plusieurs insertions à faire en même temps, tu peux utiliser la syntaxe

Code : Tout sélectionner

INSERT INTO `table`(`field1`,`field2`,`field3`, ...) VALUES('val11','val12','val13',...),('val21','val22','val23',...),...

Eléphant du PHP | 206 Messages

13 juin 2007, 16:38

Sékiltoyai> Y a t'il un gain de performance notable ? En tout cas merci du conseil.

Et sinon pouruqoi mettre des ` ` aux champs ?

ViPHP
ViPHP | 5924 Messages

13 juin 2007, 17:18

Sékiltoyai> Y a t'il un gain de performance notable ? En tout cas merci du conseil.
Oui, en règle générale, moins tu fais de requètes SQL, mieux ton serveur se porte.
Et sinon pouruqoi mettre des ` ` aux champs ?
Ca permet de dire au serveur SQL que ce sont des noms de tables ou de champs et non des noms spéciaux. C'est utile quand tu utilises un mot réservé pour désigner un nom de table ou de champ...

Eléphant du PHP | 206 Messages

14 juin 2007, 12:47

Oui, en règle générale, moins tu fais de requètes SQL, mieux ton serveur se porte.
Tu veux qu'en utilisant cette "fonction" pour inserer plusieurs entré c'est compté comme une seule requete (certes grosse)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juin 2007, 14:30

En fait, la charge au niveau de la base de données sera la même que tu fasses un insert multiple ou plusieurs insert consécutifs. En revanche l'insert multiple permet de réduire les communications entre le client et le serveur... c'est là dessus que tu vas pouvoir gagner un peu sur de gros volumes :)

Concernant les quotes inversées ` c'est du spécifique mysql, d'avantage destiné - selon moi - à rattrapper les erreurs des dba sans imagination, qui abusent des mots clés protégés du langage :) C'est pas plus judicieux que de créer des variables nommée $while, $for ou $function en php... Le mieux est de choisir intelligement ses libellés pour ne pas avoir à utiliser ces apostrophes :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...