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 :

Série d'images aléatoires toutes différentes [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut Série d'images aléatoires toutes différentes
    Bonjour à tous !

    J'ai une banque d'image dont les URL sont stockés dans une base de données mysql. Je voudrais afficher une série de 4 ou 5 images mais que celles-ci soient toutes différentes les unes des autres. J'ai juste réussi à afficher une image aléatoire mais je n'arrive pas à adapter ce script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // connection à la DB
    include("php/connexion.php");
     
    // requête SQL qui compte le nombre total d'images dans la table et qui
    //récupère tous leurs noms 
    $result = mysql_query('SELECT * FROM utilisateurs') or die ('Erreur : '.mysql_error() );
    $nbimages= mysql_num_rows($result);
     
    // si on a récupéré un résultat on l'affiche.
    if($nbimages) {
        // on remplit un tableau contenant les noms des images
        $numimage=1;
        while($row = mysql_fetch_array($result)) 
       {
           $urlimages[$numimage]=$row["urlavatar_utilisateur"];
           $numimage++;
       }
     
       // on recherche aléatoirement le numéro de la case du tableau contenant le nom de l'image à afficher
       srand((double)microtime()*1000000);
       $affimage=rand(1,$nbimages); 
     
    }
    Cependant l'autre probème avec ce script c'est qu'il choisi aléatoirement une URL mais j'aimerai plutot qu'il choisisse aléatoirement une ID d'utilisateur (déjà définie dans mysql), et qu'il aille chercher l'URL associée à cette ID.

    Comment puis-je procéder ? j'ai pensé à plusieurs boucles if imbriquées les une dans les autres mais c'est lourd..

    Merci d'avance !
    RedVivi

  2. #2
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function DelKeyTable($valeur, &$tab)
    {
            $tmp = array();
            foreach($tab as $key => $val)
            {
                    if($key != $valeur)
                    {      
                            $tmp[] = $val;
                    }
            }
            return $tmp;
    }
     
    $result = mysql_query('SELECT * FROM utilisateurs') or die ('Erreur : '.mysql_error() );
    $nbimages= mysql_num_rows($result);
     
    $all = array();
    while($tmp= mysql_fetch_assoc($result))
    {
    	$all[] = $tmp;
    }
     
    $nb = 3;
    while($nb > 0 && count($all) > 0)
    {
    	$ret = mt_rand(0, count($all) - 1);
    	$retenu[] = $all[$ret];
    	$all = DelKeyTable($ret, $all);
    	$nb--;
    }
    C'est largement perfectible, mais ça donne un idée...

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut
    Oulà..je suis un peu perdu là...comment celà fonctionne -t-il exactement?

  4. #4
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    D'abord j'ai fait une fonction qui supprime un élément du tableau en fonction de sa clef (je sais pas si il en existe une native en PHP)

    Ensuite j'execute ta requete et met tous les resultats dans un tableau indexé normalement par des entiers consécutifs

    Puis je selectionne au hasard avec mt_rand(min, max) un element du tableau, min etant 0, max le nombre d'enregistrement dans ton tableau...

    A chaque fois que je sort un element aléatoirement du tableau, je l'efface du tableau et recommence autant de fois que je veux sortir d'enregistrement ($nb)

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut
    Celà me parait délicat si je veux utiliser l'indexation de la base de donnée ? (j'ai un champ id_utilisateur dans la base sql). En fait en faisant ça tu utilise une autre indexation si j'ai bien compris ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    Je ne comprends pas le but de ton script. Corrige moi si je me trompe mais tu souhaites afficher aléatoirement une image dont l'url est contenu en bdd ?

    Si c'est le cas, pourquoi en pas inclure directement le random dans la requete SQL et utiliser la clause limit pour limiter le nombre de resultats à retourner ?

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query('SELECT * FROM utilisateurs order by rand() limit 0,2') or die ('Erreur : '.mysql_error() );
    Cette requete te renverrait deux lignes de ta table utilisateur choisies aléatoirement.

  7. #7
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Citation Envoyé par Raideman Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query('SELECT * FROM utilisateurs order by rand() limit 0,2') or die ('Erreur : '.mysql_error() );
    Excellent ! J'y avais jamais pensé a celle là :p

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 179
    Par défaut
    Citation Envoyé par Raideman Voir le message
    Je ne comprends pas le but de ton script. Corrige moi si je me trompe mais tu souhaites afficher aléatoirement une image dont l'url est contenu en bdd ?

    Si c'est le cas, pourquoi en pas inclure directement le random dans la requete SQL et utiliser la clause limit pour limiter le nombre de resultats à retourner ?

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query('SELECT * FROM utilisateurs order by rand() limit 0,2') or die ('Erreur : '.mysql_error() );
    Cette requete te renverrait deux lignes de ta table utilisateur choisies aléatoirement.
    Celà dépend si les 2 url renvoyés sont distinctes, si oui c'est parfait sinon ce n'est pas ce que je cherche.

  9. #9
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Citation Envoyé par redvivi Voir le message
    Celà dépend si les 2 url renvoyés sont distinctes, si oui c'est parfait sinon ce n'est pas ce que je cherche.
    Je vois pas trop ce que tu veux dire par url renvoyé sont distinct, mais le resultat est que ça te sort aléatoirement des enregistrement complte de ta table !

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

Discussions similaires

  1. Générer n valeurs entière aléatoires toutes différentes
    Par Stepsbysteps dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/01/2013, 14h41
  2. Réponses: 11
    Dernier message: 01/06/2012, 10h49
  3. Série d'image: affichage simultané de toutes les images
    Par weedcat dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 07/06/2009, 15h53
  4. Réponses: 7
    Dernier message: 03/12/2004, 10h15
  5. Compression d'une série d'images jpeg
    Par Tchello dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2003, 19h59

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