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 :

Trier en fonction des occurences d'une autre table [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é
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut Trier en fonction des occurences d'une autre table
    Bonjour à tous

    Cela fait plusieurs heures que je cherche une solution à mon problème, mais comme je suis une sous-daube concernant les jointures SQL...

    Bref voici mon problème:

    J'ai une table nommée « fichiers » qui, comme son nom l'indique, contient une liste de fichiers.
    Ses colonnes sont: id, nom, date, taille, membre, adr, description, tags, permissions, vues, ip,checksum et mdp

    J'ai une deuxième table, « telechargements », qui est composé des colonnes suivantes:
    fichier, membre, date, ip

    A chaque téléchargement du fichier qui a pour id x, une ligne est insérée dans la table « telechargement », avec fichier=x

    J'aimerais pouvoir lister les fichiers répertoriés dans la bdd selon le nombre de téléchargements, donc selon le nombre de lignes dont la colonne « fichier », dans la table « telechargements », correspond à la colonne « id » dans la table « fichiers ».

    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
    $requete = "SELECT * FROM fichiers";
    $mots_cles = explode(" ", $recherche);
    for ($i=0; $i < count($mots_cles); $i++) {
    if ($i == 0)
    $requete .= " WHERE tags LIKE '%".$mots_cles[$i]."%'";
    else
    $requete .= " AND tags LIKE '%".$mots_cles[$i]."%'";
    }
    $tous_resultats = $bdd->query($requete);
    $pages = ceil($tous_resultats->rowcount() / $limite_par_page);
    $debut_limite = $limite_par_page * ($page-1);
    $fin_limite = $limite_par_page * $page;
     
    $resultats = $bdd->query($requete." ORDER BY date DESC LIMIT $debut_limite, $fin_limite");
    Je souhaiterais faire un truc du genre:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM fichiers, telechargements WHERE fichiers.id = telechargements.fichier ORDER BY ROWCOUNT(telechargements) DESC

    Sauf qu'il va me retourner uniquement les fichiers qui ont déjà été téléchargés, ce que je ne veux pas

    J'espère que mes explications vous ont parues claires et désolé pour le pavé que je vous fait lire

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonsoir,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT f.id, f.nom, COUNT(t.fichier) nbTelechargement
    FROM fichier f
    LEFT JOIN telechargement t ON f.id = t.fichier
    GROUP BY f.id, f.nom
    ORDER BY nbTelechargement

    Cette requête fait la jointure entre la table fichier et téléchargement puis effectue un comptage du nombre de téléchargement pour chaque fichier à l'aide de la fonction COUNT et de la clause GROUP BY (je te laisse te renseigner sur l'utilisation du COUNT et du GROUP BY).

    À toi d'adapter selon ton besoin (la clause WHERE dans ton exemple, nom des colonnes, ...).

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    Je t'en remercie, c'est juste parfait

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    J'ai juste une dernière questions:

    Dans:
    Est-ce possible de sélectionner toutes les colonnes de f en faisant:
    Par exemple ?

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Il est possible d'utiliser
    Seulement pour garder une certaine clarté de lecture de la requête et pour éviter les doublons lorsque l'on utilise les jointures il est conseillé d'éviter l'*.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    D'accord merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2012, 07h50
  2. Réponses: 2
    Dernier message: 17/03/2011, 21h45
  3. Réponses: 3
    Dernier message: 18/12/2009, 12h33
  4. Update d'une table en fonction des champs d'une autre table
    Par The Molo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/02/2008, 15h41
  5. Réponses: 2
    Dernier message: 13/12/2007, 15h02

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