IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Récupérer la taille d'un texte dans la BDD [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut Récupérer la taille d'un texte dans la BDD
    Salut a tous,

    sur mon site j'ai ajouté un système interne de messagerie. Je souhaite limité l'espace disponbile pour chaque membre. Pour ce faire je voudrais compter la taille en octet de chaque message de chaque utilisateurs.

    Quel est la methode la plus simple pour faire ca?
    A mon avis récupérer tout les messages puis compter le volume de chacun est une methode un peu lourde.

    Vous avez des idées?

  2. #2
    Invité
    Invité(e)
    Par défaut
    salut

    vu que tu veux le faire par utilisateur, c'est pas la peine de regarder la taille de chaque message. tu n'as qu'à sélectionner l'ensemble des messages d'un utilisateur, et apres chaque fetch tu appelles mysql_fetch_lengths() pour connaitre la taille de cet ensemble de messages...

    bien sûr ensuite une solution propre serait d'avoir MySQL5 et de maintenir à jour un champ "quota" dans une vue

  3. #3
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Salut merci pour ta réponse .

    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sql="SELECT `Message` FROM `messageperso` WHERE `Destinataire`='$Nom'";
    $req=mysql_query($sql);
    echo mysql_fetch_lengths($req);
    Mais ca ne marche pas, enfin il ne m'affiche rien.

    Savez vous pourquoi?

  4. #4
    Invité
    Invité(e)
    Par défaut
    hé, un p'tit tour dans la doc ça fait pas de mal

    Citation Envoyé par [URL=http://fr2.php.net/manual/fr/function.mysql-fetch-lengths.php]la doc[/URL]
    mysql_fetch_lengths() stocke les tailles de chaque colonne de la dernière ligne retournée par mysql_fetch_row(), mysql_fetch_assoc(), mysql_fetch_array() et mysql_fetch_object() dans un tableau, en commençant à la position 0.
    rajoute donc un petit mysql_fetch_row() avec ton mysql_fetch_lengths(). de plus, cette fonction retourne un tableau, donc remplace ton echo par un print_r()

  5. #5
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Merci, en effet je l'avais pas vu comme ca . Merci.

  6. #6
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    J'espère pour toi que tu n'as pas plusieurs milliers d'utilisateurs et des messages de 10Ko. Récupérer tous les résultats en base pour en connaître la taille ? Quel gâchis ! Un LENGTH sur tout champ texte (varchar, text, blob, ...) se fait immédiatement car MySQL stocke également les longueurs des chaînes pour éviter de les calculer.

    Donc une méthode qui ne surcharge pas le serveur pour rien et qui simplifie le code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Destinataire, SUM(LENGTH(Message))
    FROM `messageperso`
    GROUP BY Destinataire

  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Biglo
    J'espère pour toi que tu n'as pas plusieurs milliers d'utilisateurs et des messages de 10Ko. Récupérer tous les résultats en base pour en connaître la taille ? Quel gâchis ! Un LENGTH sur tout champ texte (varchar, text, blob, ...) se fait immédiatement car MySQL stocke également les longueurs des chaînes pour éviter de les calculer.

    Donc une méthode qui ne surcharge pas le serveur pour rien et qui simplifie le code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Destinataire, SUM(LENGTH(Message))
    FROM `messageperso`
    GROUP BY Destinataire
    J'ai essayé ta ligne mais je récupert le pseudo du destinataire avec cette requette. Je fait comment pour récupérer la taille de ces messages?

    ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql="SELECT Destinataire, SUM(LENGTH(Message)) FROM `messageperso` GROUP BY Destinataire";
    $req=mysql_query($sql);
    $res=mysql_fetch_row($req);
    $nbtruc=$res[0];

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql="SELECT Destinataire, SUM(LENGTH(Message)) FROM `messageperso` GROUP BY Destinataire";
    $req=mysql_query($sql);
    $res=mysql_fetch_row($req);
    $nbtruc=$res[1];
    Une autre méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql="SELECT Destinataire, SUM(LENGTH(Message)) as longeur FROM `messageperso` GROUP BY Destinataire";
    $req=mysql_query($sql);
    $res=mysql_fetch_array($req, MYSQL_ASSOC);
    $nbtruc=$res["longeur"];
    Comme cela tu n'as pas de mauvaises surprises et puis c'est plus lisible.

  9. #9
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Merci ca marche, et chose rassurante ca donne le meme résultat qu'avec le mysql_fetch_lengths();.

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    En fait il y a un truc bizarre .

    j'ai toujours ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql="SELECT Destinataire, SUM(LENGTH(Message)) as longeur FROM `messageperso` GROUP BY Destinataire";
    $req=mysql_query($sql);
    $res=mysql_fetch_array($req, MYSQL_ASSOC);
    $espaceprix=$res["longeur"];
    echo $espaceprix;
    Mais il renvoie toujours la meme valeurs meme en rajoutant ou en suprimant des messages. COmment celà ce fait t-il?

  11. #11
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par Death83
    Mais il renvoie toujours la meme valeurs meme en rajoutant ou en suprimant des messages. COmment celà ce fait t-il?
    Tu l'ajoutes pour le bon destinataire (le premier renvoyé par la requête) ?

    Car ce qui est bizarre, c'est que tu n'as pas de boucle dans ton code pour parcourir les résultats. Comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql="SELECT destinataire, SUM(LENGTH(Message)) as longeur FROM `messageperso` GROUP BY Destinataire";
    $req=mysql_query($sql);
    while($res=mysql_fetch_array($req, MYSQL_ASSOC))
    {
      $espacepris = $res['longeur'];
      $destinataire = $res['destinataire'];
      echo $destinataire . ' -> ' . $espacepris . "<br />";
    }

  12. #12
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    En fait la je récupert l'espace pris par chaque utilisateur. En fait cette partie sera dans la boite de reception de chaque utilisateurs, je n'ai donc besoin de récupérer que l'espace prix par l'utilisateur concerné.

  13. #13
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Ok mais l'espace change bien là ?

    Dans la requête je t'avais proposée hier, je m'étais basée là-dessus :

    Pour ce faire je voudrais compter la taille en octet de chaque message de chaque utilisateurs.
    Alors il faut enlever le GROUP BY et mettre un WHERE destinataire = xxx.

  14. #14
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Oui ca changeait bien.

    J'ai remplacé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $Nom=$_SESSION['Nom'];
    $sql="SELECT destinataire, SUM(LENGTH(Message)) as longeur FROM `messageperso` WHERE `Destinataire`='$Nom'";
    $req=mysql_query($sql);
    while($res=mysql_fetch_array($req, MYSQL_ASSOC))
    {
            $espacepris = $res['longeur'];
    	$destinataire = $res['destinataire'];
    	echo $destinataire . ' -> ' . $espacepris . "<br />";
    }
    Mais ca me renvoie une erreur:

    mysql_fetch_array(): supplied argument is not a valid MySQL result resource

  15. #15
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    C'est bon ca marche il suffisait d'enlever destinataire, dans la requette.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gérer la taille d'un texte dans une page html
    Par Gizmil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/08/2007, 19h28
  2. Récupérer la taille d'une image dans un canevas
    Par Exca dans le forum Tkinter
    Réponses: 3
    Dernier message: 01/12/2006, 13h23
  3. Taille fixe du texte dans une page HTML
    Par The snail dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 17/10/2006, 22h37
  4. Calculer la taille d'un texte dans un DC
    Par vanitom dans le forum MFC
    Réponses: 9
    Dernier message: 28/10/2005, 16h32
  5. Récupérer la taille d'une image dans un fichier (GIF/JPEG)
    Par SheikYerbouti dans le forum Multimédia
    Réponses: 4
    Dernier message: 12/05/2005, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo