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 :

affichage des résultats d'une recherche dans la base [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut affichage des résultats d'une recherche dans la base
    Bonjour,

    J'aimerais afficher les résultats de plusieurs requêtes (j'utilise mysql) sur plusieurs pages. Pour l'instant j'ai réussi à afficher les résultats dans l'ordre que je souhaite en utilisant 3 requêtes différentes seulement tous les résultats s'affichent sur une seule et même page. Pourriez vous m'aider à afficher les résultats sur plusieurs pages. Voici mon code :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
     
     
    if(!isset($_GET['page']))
    {
    $page = 1;
    }
    else 
    {
    $page = $_GET['page'];
    }
     
     
    $max_results = 10;
    $from = (($page * $max_results) - $max_results); 
     
     
    $sql = mysql_query("SELECT champ1, champ2, champ3 FROM 
    matable WHERE champ1 ='video' ORDER BY date DESC LIMIT $from, $max_results");
     
    while ($row = mysql_fetch_array($sql)){
     
    j'affiche les résultats de la 1ère requête
    }
     
    $sql = mysql_query("SELECT champ1, champ2, champ3 FROM 
    matable WHERE champ1 ='photo' ORDER BY date DESC LIMIT $from, $max_results");
     
    while ($row = mysql_fetch_array($sql)){
     
    j'affiche les résultats de la 2ème requête à la suite de la 1ère
    }
     
    $sql = mysql_query("SELECT champ1, champ2, champ3 FROM 
    matable WHERE champ1 ='texte' ORDER BY date DESC LIMIT $from, $max_results");
     
    while ($row = mysql_fetch_array($sql)){
     
    j'affiche les résultats de la 3ème requête à la suite de la 2ème
    }
     
     
    // J'affiche le nombre de page
    $total_results = mysql_result(mysql_query("SELECT COUNT(*) as 
    Num FROM stallions"),0);
     
     
    $total_pages = ceil($total_results / $max_results);
     
     
    echo "<center><p><strong>";
     
     
    if($page > 1){
        $prev = ($page - 1);
        echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\">Précédente</a> ";
    }
     
    for($i = 1; $i <= $total_pages; $i++){
        if(($page) == $i){
            echo "$i ";
            } else {
                echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
        }
    }
     
     
    if($page < $total_pages){
        $next = ($page + 1);
        echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Suivante</a>";
    }
    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    QU'entends-tu par "afficher sur une autre page" ? Tu veux un saut de page à l'impression pour chaque nouvelle requête ? Ou bien tu veux que sur la page 1 ne s'affiche que la requête 1, sur la 2, la requête 2, etc ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par guidav
    QU'entends-tu par "afficher sur une autre page" ? Tu veux un saut de page à l'impression pour chaque nouvelle requête ? Ou bien tu veux que sur la page 1 ne s'affiche que la requête 1, sur la 2, la requête 2, etc ?
    Je veux que s'affiche 10 résultats sur la page 1, 10 sur la page 2, 10 en page 3 etc... peu importe la requête. S'il y a 5 résultats pour la requête 1 et 5 pour la requête 2 alors les results s'affichent tous sur la page 1. Tu vois ce que jeux dire. Je ne veux pas de "coupure" entre les resultats.

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Si tes requêtes le permettent, mets-en les résultats dans un unique tableau ou fais une requête UNION. Ensuite, tu affiches le tableau par tranche de 10 lignes.
    Sinon, il faudra faire un test après chaque affichage, ca risque d'être lourd.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par guidav
    Si tes requêtes le permettent, mets-en les résultats dans un unique tableau ou fais une requête UNION. Ensuite, tu affiches le tableau par tranche de 10 lignes.
    Sinon, il faudra faire un test après chaque affichage, ca risque d'être lourd.
    Je débute en php. ca serait sympa de me donner un exemple ou un tuto. Encore merci pour ton aide

  6. #6
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Juste pour être sûr : tu prends tes enregistrements des mêmes champs de la même table, non ?

    Un truc que je n'ai pas compris : tu veux que s'affichent d'abord tous les résultats video, puis tous les résultats photos, puis tous les résultats texte ? Ou bien ces résultats peuvent-ils être mélangés entre eux ?
    Exemple : tu as 15 video, 12 photo, 8 texte, avec des dates qui s'entrecroisent, tu veux
    page 1 : les 10 premiers video, photo et texte (classement par date puis par type)
    page 2 : les 10 suivants
    page 3 : les 10 suivants
    page 4 : les 5 derniers
    Dans ce cas tu fais la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = mysql_query("SELECT champ1, champ2, champ3 FROM 
    matable WHERE champ1 ='video' or champ1 ='photo' or 'champ1 ='texte'  ORDER BY date DESC LIMIT $from, $max_results");
    ou autre chose ?

    J'espère avoir pu t'aider

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par guidav
    Juste pour être sûr : tu prends tes enregistrements des mêmes champs de la même table, non ?

    Un truc que je n'ai pas compris : tu veux que s'affichent d'abord tous les résultats video, puis tous les résultats photos, puis tous les résultats texte ? Ou bien ces résultats peuvent-ils être mélangés entre eux ?
    Exemple : tu as 15 video, 12 photo, 8 texte, avec des dates qui s'entrecroisent, tu veux
    page 1 : les 10 premiers video, photo et texte (classement par date puis par type)
    page 2 : les 10 suivants
    page 3 : les 10 suivants
    page 4 : les 5 derniers
    Dans ce cas tu fais la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = mysql_query("SELECT champ1, champ2, champ3 FROM 
    matable WHERE champ1 ='video' or champ1 ='photo' or 'champ1 ='texte'  ORDER BY date DESC LIMIT $from, $max_results");
    ou autre chose ?

    J'espère avoir pu t'aider
    tu prends tes enregistrements des mêmes champs de la même table, non ?
    OUI

    tu veux que s'affichent d'abord tous les résultats video, puis tous les résultats photos, puis tous les résultats texte ?
    OUI Je veux que s'affichent en premier tous les video puis tous les photo puis tous les texte. Les resultats ne peuvent pas être mélangés entre eux. Justement pour l'instant c mélangé et je le veux pas

  8. #8
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Et si tu fait une recherche en classant par odre alphabétique le champs qui indique le type ?
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Pahcixam
    Et si tu fait une recherche en classant par odre alphabétique le champs qui indique le type ?
    c'est une good idea mais je veux que video soit 1er et ensuite photo et ensuite texte. Ca donne V P T. t'as une solution pour ca?

  10. #10
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Dans ce cas, il suffit d'ajouter un champ fictif calculé qui permettra de faire un classement sur le champ1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = mysql_query(
    "SELECT champ1, champ2, champ3, IF(champ1='video',0,IF(champ1='photo',1, IF(champ1='texte',2,3))) AS ORDRE_champ1 
    FROM matable 
    WHERE champ1 ='video' or champ1 ='photo' or 'champ1 ='texte'  
    ORDER BY ORDRE_champ1 ASC, date DESC 
    LIMIT $from, $max_results");
    Avec une seule requête, tu récupères les 10 résultats qui t'intéressent et u les mets dans l'ordre que tu veux en associant des nombres arbitraires aux valeurs de champ1.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    merci guidav je vais essayer

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par guidav
    Dans ce cas, il suffit d'ajouter un champ fictif calculé qui permettra de faire un classement sur le champ1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = mysql_query(
    "SELECT champ1, champ2, champ3, 
    IF(champ1='video',0,IF(champ1='photo',1, 
    IF(champ1='texte',2,3))) AS ORDRE_champ1 
    FROM matable 
    WHERE champ1 ='video' or champ1 ='photo' or 'champ1 ='texte'  
    ORDER BY ORDRE_champ1 ASC, date DESC 
    LIMIT $from, $max_results");
    Avec une seule requête, tu récupères les 10 résultats qui t'intéressent et u les mets dans l'ordre que tu veux en associant des nombres arbitraires aux valeurs de champ1.

    j'ai modifié ma requête avec ton code ca donne ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = mysql_query("SELECT champ1,champ2,champ3 IF(champ1='Video',0,IF(champ1='Photo',1, 
    IF(champ1='Texte',2,3))) AS ORDRE_champ1 FROM matable WHERE champ2 
    ='active' AND (champ1 ='Video' OR champ1 ='Photo' OR champ1 ='Texte') 
    ORDER BY ORDRE_champ1 ASC, date DESC LIMIT $from, 
    $max_results");
    Seulement j'ai l'erreur suivante

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
    resource in C:\Sites\...\...\webroot\...\...\....php
    on line 89

    sur la page ou s'execute la requête. T'as une idée d'ou vient le problème?

  13. #13
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Là je ne vois pas d'où ça vient : éventuellement il manque une virgule avant le premier 'IF', mais sinon je ne vois pas. Essaye d'exécuter la requête directement dans phpmyadmin ou similaire, pour voir où se trouve l'erreur.
    C'est pour ça qu'en général je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = "select machin from truc";
    $query = mysql_query($sql);
    Ca permet de faire un echo $sql au milieu en cas de besoin. Sinon mysql_query() or die("erreur dans $sql") marche aussi pas mal.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Merci j'ai résolu le problème. Ton code fonctionne

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

Discussions similaires

  1. [AC-2010] Affichage des résultats d'une requête dans un formulaire
    Par h.valnot dans le forum Access
    Réponses: 6
    Dernier message: 29/04/2015, 14h31
  2. [MySQL] Problème d'affichage des résultats d'une requête dans tableau
    Par Foune1 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/12/2012, 12h28
  3. Réponses: 2
    Dernier message: 05/05/2010, 13h16
  4. Affichage des résultats du khi-deux dans une table
    Par jenyo7 dans le forum SAS STAT
    Réponses: 14
    Dernier message: 29/04/2010, 16h03
  5. Affichage des résultats d'une requête dans listbox
    Par Deallyra dans le forum VBA Access
    Réponses: 8
    Dernier message: 09/10/2007, 15h09

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