Page 1 sur 1
Condition assez complexe
Posté : 12 juin 2007, 17:31
par Snipefire
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
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
Posté : 12 juin 2007, 17:36
par Klomac
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 }
}
Posté : 12 juin 2007, 18:07
par Sékiltoyai
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']++;
}
}
Posté : 13 juin 2007, 09:36
par Henri
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 ...".
Posté : 13 juin 2007, 14:16
par Snipy
Merci pour vos réponses, je vais regarder ça dans l'après midi, et je vous tiens au courant.

Posté : 13 juin 2007, 15:42
par Sékiltoyai
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',...),...
Posté : 13 juin 2007, 16:38
par Snipy
Sékiltoyai> Y a t'il un gain de performance notable ? En tout cas merci du conseil.
Et sinon pouruqoi mettre des ` ` aux champs ?
Posté : 13 juin 2007, 17:18
par Sékiltoyai
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...
Posté : 14 juin 2007, 12:47
par Snipy
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)
Posté : 14 juin 2007, 14:30
par Ryle
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
