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 :

Requete Mysql avec tableau de variable [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
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Par défaut Requete Mysql avec tableau de variable
    Bonjour,

    Je ne suis pas très expert en PHP. Depuis j'ai toujours réalisé des sites avec des requêtes simples. Aujourd'hui je suis monté à un niveau un plus compliqué et je bute. Voilà mon souci. Je souhaiterais mettre en place un top des articles les mieux notés.

    Donc j'ai une requêtes qui me retourne un tableau d'Id correspondant au classement des articles les mieux notés par un plugin de rating jquery. Les notes des articles sont dans une table différentes de celle des articles et juste liée avec la table article par l'id.


    Ce que je souhaiterais faire c'est créer maintenant une deuxième requête qui ira me chercher dans la table articles, les titres correspondants aux id présents dans mon tableau.

    Vu que j'ai une requête du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id, titre FROM articles WHERE id='$id'
    Quel est le concepte ou le principe à faire lorsqu'au lieu d'avoir un seul id, on a un tableau. J'ai essayé plusieurs choses notamment une boucle foreach. Mais je pense que je m'y suis mal pris.

    Merci pour toutes aides ou orientation

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    La réponse immédiate à ta question est l'utilisation de la clause IN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT machin FROM truc WHERE bidule IN ('valeur1', 'valeur2', etc.)
    Une meilleure réponse est: ne fais pas deux requêtes mais une jointure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT a.* FROM articles AS a JOIN rating AS b ON (b.id_article=a.id) WHERE b.note > 5;
    (j'ai utilisé des noms de tables et de colonnes absolument arbitraires, à toi de l'adapter).

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Par défaut
    Merci Benjamin. Effectivement je cherchais dans des chemins très compliqué alors qu'il y avait plus simple.

    Merci beaucoup. J'ai donc fait une jointure qui va me chercher les titres des articles correspondants aux id de la table rating. Puis j'ai juste fais un tri par ordre décroissant et mis une limite à 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.id AS id, a.titre AS titre, r.total_value AS note
    FROM articles a, articles_ratings r
    WHERE r.id = a.id
    ORDER BY note DESC
    LIMIT 0 , 30
    Ainsi j'ai les 10 titre des 10 meilleurs articles les mieux notés.

    Merci bcp

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pas de quoi, tu peux encore améliorer ta requête en mettant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.id AS id, a.titre AS titre, r.total_value AS note
    FROM articles a 
    JOIN articles_ratings r
    ON (a.id = r.id)
    ORDER BY note DESC
    LIMIT 0 , 30
    Car, quand tu utilise la jointure comme tu le faisait, MySQL procédait d'abord à un produit cartésien avant d'appliquer la clause where alors qu'avec le mot clé JOIN ... ON, MySQL va optimiser la jointure naturellement.

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Tu as raison en disant ceci :
    [quote=Benjamin Delespierre;6254527]Pas de quoi, tu peux encore améliorer ta requête en mettant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.id AS id, a.titre AS titre, r.total_value AS note
    FROM articles a 
    JOIN articles_ratings r
    ON (a.id = r.id)
    ORDER BY note DESC
    LIMIT 0 , 30
    Mais tort en disant cela :
    Car, quand tu utilise la jointure comme tu le faisait, MySQL procédait d'abord à un produit cartésien avant d'appliquer la clause where alors qu'avec le mot clé JOIN ... ON, MySQL va optimiser la jointure naturellement.
    Il a simplement utilisé l'ancienne syntaxe pour les jointures, obsolète depuis 1992 (bientôt 20 ans quand même ! ) et qui est encore malheureusement enseignée semble t-il prioritairement à la syntaxe plus moderne dans nos établissements scolaires français qui ont bien du mal à se mettre à la page !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Autant pour moi CinePhil.

    obsolète depuis 1992 (bientôt 20 ans quand même ! ) et qui est encore malheureusement enseignée semble t-il prioritairement à la syntaxe plus moderne dans nos établissements scolaires français qui ont bien du mal à se mettre à la page !
    Je l'ai constaté moi aussi il y a de cela seulement 3 ans.

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

Discussions similaires

  1. syntaxe requete mysql avec des variables
    Par harlock59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/09/2006, 17h53
  2. pb requete mysql avec un WHERE NOT IN
    Par megapacman dans le forum Requêtes
    Réponses: 9
    Dernier message: 27/07/2006, 10h05
  3. Requete MySQL avec un Rand sur une table
    Par tom06440 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/01/2006, 17h37
  4. Afficher une requete MYSQL avec jointure
    Par Higestromm dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/12/2005, 15h52
  5. Probleme requete Mysql avec WHERE
    Par Dom_the_quaker dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/10/2005, 16h21

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