Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1612 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème pour faire une requête SQL.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème pour faire une requête SQL.

n°1709190
gniii2
Posté le 28-03-2008 à 13:11:16  profilanswer
 

Bonjour,
j'aimerais faire une requete SQL mais je ne sais pas trop comment m'y prendre. Pour simplifier les choses voila les tables que j'ai :

Citation :

Table joueurs avec id
Table messages avec id, id_destinataire, message.


Ce que j'aimerais c'est pour chaque joueur vérifier si il a plus de 20 messages. Si c'est le cas supprimer tous ses messages.
En gros voila ce que j'aimerais faire :
 

Code :
  1. <?PHP
  2. // recupere tous les joueurs
  3. $reponse = mysql_query('SELECT id FROM joueurs');
  4. while ($donnees = mysql_fetch_array($reponse))
  5. {
  6.    $id = $donnees['id'];
  7.  
  8.    // le nombre de messages stoquer par un joueur
  9.    $reponse1 = mysql_query("SELECT COUNT(*) AS num FROM messages WHERE id_destinataire='$id'" );
  10.    $donnees1 = mysql_fetch_array($reponse1);
  11.  
  12.    // si il a plus de 18 messages, on efface tous ses messages
  13.    if ($donnees1['num'] > 20)
  14.       mysql_query("DELETE FROM messages WHERE id_destinataire='$id'" );
  15. }
  16. ?>


 
Comme vous le voyez c'est super moche. Si j'ai 3000 personnes dans ma BDD, ça fera au moins 3000 requêtes... mais j'arrive pas à voir comment faire autrement.
 
Merci d'avance a ceux qui m'aiderons :)

mood
Publicité
Posté le 28-03-2008 à 13:11:16  profilanswer
 

n°1709209
mrbebert
Posté le 28-03-2008 à 13:46:47  profilanswer
 

Déjà, tu peux récupérer en 1 seule requête la liste des id ayant plus de 20 entrées dans la table messages :
 
SELECT id_destinataire, COUNT(1) nb
FROM messages
GROUP BY id_destinataire
HAVING nb > 20
 
(le "group by" permet d'exécuter le "count" pour chaque id_destinataire, et le HAVING permet de filtrer les lignes sur le résultat du "count" ).

n°1709272
gniii2
Posté le 28-03-2008 à 14:44:44  profilanswer
 

Merci beaucoup, je connaissais pas tout ca !
Je vais voir si ça marche.
 
Mais y'a t'il un moyen de faire aussi la suppression des message dans la même requête ?
 

Code :
  1. $rep = mysql_query("SELECT id_destinataire, COUNT(1) nb FROM messages GROUP BY  id_destinataire HAVING nb > 18" );
  2. while ($donnees = mysql_fetch_array($rep))
  3. {
  4.    $id = $donnees['id_destinatairet'];
  5.    mysql_query("DELETE FROM messages WHERE id_destinataire='$id'" );
  6. }



Message édité par gniii2 le 28-03-2008 à 14:45:49
n°1709518
mrbebert
Posté le 28-03-2008 à 19:57:45  profilanswer
 

Je pense que non. La recherche des id (lecture) et la suppression portant sur la même table, je ne pense pas que le SGBD accepte de les méler dans une même requête [:proy]

n°1710669
gniii2
Posté le 31-03-2008 à 21:42:20  profilanswer
 

Merci beaucoup pour ces précisions ! :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème pour faire une requête SQL.

 

Sujets relatifs
C# -- Problème d'éxécution de requête sur la base SQL serverProblème Requete SQL
[SQL Serveur] probleme requete avec calcul (tout bete)Probleme de requête SQL
[RESOLU] - Probleme requete SQL - RETURN[SQL] Problème avec une petite requête et un DISTINCT.
[SQL 2005] Problème pour une requête SELECTProblème requete SQL sur du PHP
Problème de requête SQL - PHP - mysql[SQL/Access] problème pour une requête en apparence assez simple
Plus de sujets relatifs à : Problème pour faire une requête SQL.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR