Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2011, 16h59   #1
Membre à l'essai
 
Inscription : mars 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 140
Points : 22
Points : 22
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 :
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
yamatoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 17h14   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
La réponse immédiate à ta question est l'utilisation de la clause IN:
Code :
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 :
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).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 11h13   #3
Membre à l'essai
 
Inscription : mars 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 140
Points : 22
Points : 22
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 :
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
yamatoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 12h13   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Pas de quoi, tu peux encore améliorer ta requête en mettant:
Code :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h19   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Tu as raison en disant ceci :
[quote=Benjamin Delespierre;6254527]Pas de quoi, tu peux encore améliorer ta requête en mettant:
Code :
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 :
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/09/2011, 14h42   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Autant pour moi CinePhil.

Citation:
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h27.


 
 
 
 
Partenaires

Hébergement Web