requete sur 2 tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requete sur 2 tables

Re: requete sur 2 tables

par meteo71 » 19 févr. 2010, 15:36

J'ai trouvé le problème. Cela venait de ma table "vote" et de la clé primaire qui posait problème. C'est tout réglé et ça fonctionne parfaitement.

Je vous remercie tous les deux pour aide et votre patience.

=D>

Re: requete sur 2 tables

par ouckileou » 19 févr. 2010, 15:14

On peut savoir comment tu les affiches ?

Re: requete sur 2 tables

par meteo71 » 19 févr. 2010, 15:05

Je suis long à la comprenette !!J'ai oublié d'utiliser la variable nb_votes ... le compte y est.

Par contre, je viens de m'apercevoir d'un petit problème.
lorsque j'ai des photos avec des votes supérieurs à 1, elles ne sont pas affichées. Quand je remplace DESC par ASC, elles sont bien affichées mais à la fin de ma liste et quand je met DESC, elles disparaissent et il ne reste que les photos avec 1 vote... Jamais vu ce comportement. Dans les 2 cas, il me manque aussi à chaque fois une photo

Ps : j'ai fais la modification au dessus mais cela ne changer rien.

Re: requete sur 2 tables

par ouckileou » 19 févr. 2010, 14:52

Ah oui, bien vu !

Re: requete sur 2 tables

par iclo » 19 févr. 2010, 14:45

Salut
SELECT p.id, COUNT(*) AS nb_votes
FROM photos p
INNER JOIN  votephoto vp ON p.id = vp.id_photo
GROUP BY p.id
ORDER BY COUNT(*) DESC
Une petite faute de frappe, je pense: vp et non p pour la partie droite du join: (p.id = vp.id_photo au lieu de p.id = p.id_photo)

Re: requete sur 2 tables

par ouckileou » 19 févr. 2010, 14:17

pour mon dernier petit problème, "c'est que je voulais compter le nombre de vote obtenu pour chaque photo (dans la même requête ?) pour afficher ensuite ce résultat lorsque j'affiche les photos.",
c'est possible de le faire avec la même requête ?
Ben c'est là que je ne comprends plus, pour moi c'est ce que fait la requête que je t'ai fournie...

Re: requete sur 2 tables

par meteo71 » 19 févr. 2010, 12:50

ok,
c'est bien plus clair comme ça et surtout bien mieux expliqué que dans les docs parfois assez obscures. J'avais bien lu les passages sur les jointures mais je ne savais pas trop comment m'y prendre. Merci !

pour mon dernier petit problème, "c'est que je voulais compter le nombre de vote obtenu pour chaque photo (dans la même requête ?) pour afficher ensuite ce résultat lorsque j'affiche les photos.",
c'est possible de le faire avec la même requête ?

car je le fais avec une autre requête mais du coup, il me faudrait 2 while dans mon tableau, et ça ne marche plus du tout.

Re: requete sur 2 tables

par ouckileou » 19 févr. 2010, 12:36

SELECT p.id
FROM photos p
INNER JOIN  votephoto vp ON p.id = p.id_photo
Cette requête est équivalente à celle que tu avais faite comme ça
SELECT id
FROM photos, votephoto
WHERE id = id_photo
Sauf que je fais la jointure avec
table1 INNER JOIN table 2
le ON c'est la condition de jointure, celle que tu avais mise dans le WHERE. On préfère garder le WHERE pour le filtrage (WHERE age_etudiant > 25, WHERE sexe = 'feminin')

Le 'vp', c'est un alias, c'est pour identifier la table votephoto dans les noms de colonnes, sans avoir à retaper "votephoto".

Tu trouveras des infos dans le manuel MySQL, à consulter sans modération, surtout pour les jointures, il y a plusieurs types.

Re: requete sur 2 tables

par meteo71 » 19 févr. 2010, 12:14

Mais du coup je ne vois pas ce que tu veux dire par "nombre de vote individuellement".
Merci, ça marche aussi et c'est effectivement bien plus simple. :lol: Pour les noms des tables, ce n'est rien, j'ai juste des tests que je fais et avec des noms qui ont changé.
au passage, j'ai pas compris ce que voulais dire vp ON

Pour clarifier ma pensée, c'est que je voulais compter le nombre de vote obtenu pour chaque photo (dans la même requête ?) pour afficher ensuite ce résultat lorsque j'affiche les photos.

Re: requete sur 2 tables

par ouckileou » 19 févr. 2010, 11:28

Tu pourrais faire ça en une seule fois, c'est une requête assez simple et classique, pas besoin de créer une table temporaire :

Si je reprends ta première requête et que je la modifie (pas compris ici pourquoi "votephoto" s'est transformé en "photojaime" alors je prends les tablesz du premier message)
SELECT p.id, COUNT(*) as nb_votes
FROM photos p
INNER JOIN  votephoto vp ON p.id = p.id_photo
GROUP BY p.id
ORDER BY COUNT(*) DESC
Mais du coup je ne vois pas ce que tu veux dire par "nombre de vote individuellement".

Re: requete sur 2 tables

par meteo71 » 19 févr. 2010, 10:50

Voila ce que j'ai fait et qui marche :
create temporary table matable engine=memory as Select id,photo From photos, photosjaime WHERE id=id_article
Je lance ensuite cette deuxième requête qui me sort exactement ce que je veux :
$requete2 = "SELECT *, COUNT(*) FROM matable group by id ORDER by COUNT(id) DESC";

Mes photos sont bien classées par le nombre de votant.J
J'affiche ensuit en faisant un While

Mais j'ai encore un dernier problème. Je veux compter le nombre de vote individuellement et afficher ce nombre avec la photo mais la je continue de bloquer

merci

Re: requete sur 2 tables

par Invité » 18 févr. 2010, 19:51

ça pourrait être plus clair mais on arrive à comprendre :)
Je me disais aussi !!
Est-ce que tu sais déjà lier chaque photo avec son ou ses votes ? Fais déjà cette requête simple avec la jointure.
Pas vraiment ...
Moi j'aurais d'abord classer les id_photo dans la table vote puis associer ces id à une photo de l'autre table mais apparemment, il faut faire l'inverse.

Je dirais un truc comme ça : A priori, cela me sort bien les id et les photos correspondantes
Select id,photo From photos, photosjaime WHERE id=id_article

Disons que ma requête est bonne, je ne vois pas comment compter dans la même requête le nombre de photos ??

Re: requete sur 2 tables

par ouckileou » 18 févr. 2010, 18:32

Je veux compter et classer les id_photo dans la table votephoto et à partir de ce classement, les recouper (à la deuxième table) pour afficher la liste complète des photos correspondantes dans la deuxième table "photo" et afficher les photos ayant reçu des votes de façon décroissante.
[...]
Ps : j'espère avoir été clair !!
ça pourrait être plus clair mais on arrive à comprendre :)

Quand tu poses une question dis plutôt "Je veux afficher les photos dans l'ordre décroissant de leur nombre de vote", dans une formulation "métier", sans insérer des idées de procédure comme "compter les id"

Est-ce que tu sais déjà lier chaque photo avec son ou ses votes ? Fais déjà cette requête simple avec la jointure.

Ensuite, tu auras besoin de COUNT pour compter les lignes de vote, et GROUP BY pour regrouper par photo.

requete sur 2 tables

par meteo71 » 18 févr. 2010, 16:23

Bonjour,

j'ai un petit problème de requête que je vous soumet ici :
J'ai 2 tables :
table "photo" avec comme champ : id, nom de la photo, et 7 ou 8 autres champs qui ne nous intéresse pas ici
et une table "votephoto" avec 2 champs : id_photo et ip (id_photo correspndant à l'id de l'autre table)

Je veux compter et classer les id_photo dans la table votephoto et à partir de ce classement, les recouper (à la deuxième table) pour afficher la liste complète des photos correspondantes dans la deuxième table "photo" et afficher les photos ayant reçu des votes de façon décroissante.

Je n'y arrive pas.
Merci de votre aide

Ps : j'espère avoir été clair !!