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

Requêtes MySQL Discussion :

Comment rassembler 2 requêtes en 1, la seconde bouclant autant de fois qu'il y a de ligne dans la première


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Comment rassembler 2 requêtes en 1, la seconde bouclant autant de fois qu'il y a de ligne dans la première
    Bonjour,

    Mon projet propose à des membres de s'abonner à des stars.
    J'ai besoin de savoir pour chaque star, les 10 autres stars avec le plus d'abonnés.

    Actuellement j'ai un script PHP qui me permet de lister les identifiants de "stars".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT f1.id_star
          FROM oa_fan f1
          INNER JOIN oa_fan f2 ON f1.id_member=f2.id_member
          WHERE f1.id_star<>f2.id_star
    Chaque identifiant de star devient un critère de la seconde requête. J'affiche pour chaque star, les 10 premières autres stars liées avec un pourcentage d'abonnement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT f1.id_star, f2.id_star AS linked_star_id, ROUND((COUNT(*) / s1.nb_fans)*100, 2) AS p_cent
                        FROM oa_fan f1
                        INNER JOIN oa_fan f2 ON f1.id_member=f2.id_member
                        INNER JOIN oa_star s1 ON f1.id_star=s1.id_star
                        INNER JOIN oa_star s2 ON f2.id_star=s2.id_star
                        WHERE f1.id_star<>f2.id_star
                        AND f1.id_star=".$row['id_star']."
                        GROUP BY f2.id_star
                        ORDER BY COUNT(*) DESC
                        LIMIT 10
    Actuellement ces 2 requêtes sont dans un script PHP avec une boucle sur le résultat des lignes renvoyées par la première requête en passant à chaque itération l'identifiant de la star en critère de la seconde requête ($row['id_star'])

    Ce projet doit maintenant s'inclure dans un outil qui n'accepte en paramètre qu'une et une seule requête SELECT sur ma base MySql.
    Existe-t-il une solution pour rassembler mes 2 requêtes tout en conservant les contraintes de retourner les 10 premières lignes à chaque fois et calculer mon pourcentage ?

    Merci d'avance pour vos suggestions.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Il suffit de faire une sous requête corrélée.

    A me lire : http://sqlpro.developpez.com/cours/s...usrequetes/#L2

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut lecat71.

    Il nous faut la structure de vos tables, un jeu d'essai conforme à ce que vous cherchez à faire par table, et le résultat attendu.
    Il n'y a aucune difficulté pour ce que vous essayez de faire, et en effet, une requête avec jointures permettra de résoudre votre problème.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50
  2. Comment grouper une requête par mois ?
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/06/2005, 12h01
  3. Comment traduire une requête en XPATH ?
    Par vincent1 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 24/06/2005, 12h46
  4. [SQL] Comment faire ma requête
    Par kaiserazo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/05/2005, 10h39

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