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 :

[SQL] Tri de tableau


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Par défaut [SQL] Tri de tableau
    Bonjour,
    Au final, je souhaite extraire des photos d'une base de données d'une manière aléatoire et les afficher page par page.
    J'ai pensé remplir un tableau avec les données et trier ce tableau (pas les trier au moment du "select.....).
    Auriez-vous une idée ?
    Voilà un extrait du script mais j'ai un message d'erreur

    "Warning: Invalid argument supplied for foreach() in c:\........"
    ..............
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ($row3 = mysql_fetch_row($resnb))
    {
    sort($row3);
    }
       foreach ($row3 as $value) {
     	    echo "$value<br />";
     	}
    Merci

  2. #2
    Him
    Him est déconnecté
    Membre éclairé Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Par défaut
    Hello,

    pourquoi les triés ?

    -> pour "shake" les données à la sortie ( aléatoire ).

    tu ajoutes RAND() à la fin de ra requête SQL.

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Là, avec ton sort, t'es en train de faire un tri des colonnes, pas des lignes, donc pas vraiment ce que tu veux faire. Faut faire un while ($row3 = mysql_fetch_row($resnb)) pour compléter un tableau et après le while, tu fais le sort et l'affichage.

    Pourquoi préciser "extraire des photos d'une base de données d'une manière aléatoire" alors que tu fais un sort derrière ? Pour compléter ce que dit Him, le RAND() se met dans un ORDER BY : SELECT ... FROM ... WHERE ... ORDER BY RAND().

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Par défaut
    Merci pour ces réponses.
    le cas est le suivant : ce sont des photos de biens immobiliers et on souhaite que lorsque l'internaute consulte le site, les photos s'affichent aléatoirement, trois par trois par page, mais qu'elles passent bien toutes en revue.
    J'avais déja trié aléatoirement au moment du select, mais au moment de cliquer sur "page suivante", le fichier s'éxécute à nouveau, et le tri se refait , donc des photos déjà vues peuvent se réafficher.
    Donc je souhaite mettre les photos dans un tableau, trier ce tableau et le lister, faire page suivante et continuer de lister ce tableau sans refaire de tri.
    Merci pour le coup de main.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonjour,
    votre foreach ne peut fonctionner car $row3 n'est plus un array mais une boolean (FALSE). Sinon, pour votre souci, il y a toujours moyen d'utiliser la session de votre visiteur pour coder un petit script qui va bien.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
      session_start();
     
      if (!isset($_SESSION['images_list'])) $_SESSION['images_list'] = array();
     
      if
      (
        !mysql_connect('localhost', 'darian', 'mdp') ||  
        !mysql_select_db('base')                        ||
        !$res = mysql_query('SELECT `image_id` FROM `images`')
      )
      die(mysql_error());
     
      mysql_close();
     
      $images_count = mysql_num_rows($res);
     
      $images_remaining = $images_count-count($_SESSION['images_list']);
     
      if ($images_remaining >= 3) $x = 3;
      else if ($images_remaining != 0) $x = $images_remaining;
      else exit('Il n\'y a plus d\images à afficher!');
     
      $images_id = array();
      $images_choice = array();
     
      while (list($image_id) = mysql_fetch_row($res)) $images_id[] = $image_id;
     
      for ($i = 0; $i < $x; $i++)
      {  
     
        shuffle($images_id);
     
        for ($n = 0; $n < $images_count; $n++)
        {
     
          $image_id = $images_id[$n];
     
          if (!in_array($image_id, $_SESSION['images_list']))
          {
            $_SESSION['images_list'][] = $image_id;
            $images_choice[] = $image_id;
            break;
          }
     
        }
     
      }
     
      foreach ($images_choice as $image) echo 'Affiche l\'image ayant pour id : '.$image.'<br />';  
     
    ?>
    J'ai volontairement simplifié le script, mais j'ai aussi volontairement évité toutes fonctions utilisant le hasard (sauf shuffle), comme mt_rand ou array_rand car elles font tourner le script en rond avant de trouver un résultat.

    J'ai préféré des for car au moins, le script ne fera qu'une fois le tour avant d'en voir le bout, alors qu'avec mt_rand ou array_rand, on peut facilement faire 10x le tour.

    J'ai aussi préféré un SELECT simple, plutôt qu'une requête plus lourde (crade?) avec NOT IN... je suis resté dans le cadre de l'exemple en travaillant avec PHP.

    Cordialement,
    DaRiaN.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Par défaut
    Bonjour,
    j'approche de la solution, mais j'ai oublié de préciser un peu plus mon problème.
    Dans cette table (qui contient entre autres, un champ "photos" et un champ "référence"), que je souhaite trier aléatoirement, il faut que tous les champs soient triés ensemble et que je puisse afficher mes photos accompagnées de leurs références.
    Merci

Discussions similaires

  1. Tri sur tableau multi pour génération de jointures SQL
    Par Djakisback dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/09/2007, 14h58
  2. [JSP][SQL]Tri d'un tableau HTML
    Par wafiraed dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 11/07/2006, 15h35
  3. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42
  4. résultat d'une requete SQL dans un tableau en JSP
    Par Paradoxys dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/04/2005, 16h17
  5. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10

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