Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3817 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Jointure et "LIMIT"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Jointure et "LIMIT"

n°1271185
will75012
Posté le 21-12-2005 à 12:54:48  profilanswer
 

J'ai une requête mysql avec jointure sur 3 tables :
La table DVD et la table Acteurs et la table de relaction entre les DVD et les acteurs.
Un DVD peu biensur avoir plusieur acteurs...
Quand je met un LIMIT pour avoir seulement les 10 premiers résultats il me retourne :
 
...Comme elle respire > Marie Trintignant
...Comme elle respire > Guillaume Depardieu
...Comme elle respire > Jean-françois Stévenin
...Comme elle respire > Serge Riaboukine
...Comme elle respire > Blanchette Brunoy
...Comme elle respire > Michèle Moretti
1 Chance sur 2 > Jean-paul Belmondo
1 Chance sur 2 > Alain Delon
1 Chance sur 2 > Vanessa Paradis
1 Chance sur 2 > Eric Defosse
 
Hors moi je veux les 10 premier films et non pas les 10 premières paires !
 
Voici ma requête :
 

Code :
  1. $result = mysql_query("
  2. SELECT dvd_catalogue.titre,dvd_catalogue.id_dvd,dvd_lib_acteurs.id_acteur,dvd_lib_acteurs.acteur
  3. FROM dvd_catalogue
  4. INNER JOIN dvd_join_acteurs ON (dvd_catalogue.id_dvd=dvd_join_acteurs.id_dvd)
  5. INNER JOIN dvd_lib_acteurs ON (dvd_join_acteurs.id_acteur=dvd_lib_acteurs.id_acteur)
  6. ORDER BY dvd_catalogue.titre
  7. LIMIT 10
  8. " );


 
Comment faire?

Message cité 2 fois
Message édité par will75012 le 21-12-2005 à 12:56:16
mood
Publicité
Posté le 21-12-2005 à 12:54:48  profilanswer
 

n°1271253
Berceker U​nited
PSN : berceker_united
Posté le 21-12-2005 à 13:57:47  profilanswer
 

will75012 a écrit :

J'ai une requête mysql avec jointure sur 3 tables :
La table DVD et la table Acteurs et la table de relaction entre les DVD et les acteurs.
Un DVD peu biensur avoir plusieur acteurs...
Quand je met un LIMIT pour avoir seulement les 10 premiers résultats il me retourne :
 
...Comme elle respire > Marie Trintignant
...Comme elle respire > Guillaume Depardieu
...Comme elle respire > Jean-françois Stévenin
...Comme elle respire > Serge Riaboukine
...Comme elle respire > Blanchette Brunoy
...Comme elle respire > Michèle Moretti
1 Chance sur 2 > Jean-paul Belmondo
1 Chance sur 2 > Alain Delon
1 Chance sur 2 > Vanessa Paradis
1 Chance sur 2 > Eric Defosse
 
Hors moi je veux les 10 premier films et non pas les 10 premières paires !
 
Voici ma requête :
 

Code :
  1. $result = mysql_query("
  2. SELECT dvd_catalogue.titre,dvd_catalogue.id_dvd,dvd_lib_acteurs.id_acteur,dvd_lib_acteurs.acteur
  3. FROM dvd_catalogue
  4. INNER JOIN dvd_join_acteurs ON (dvd_catalogue.id_dvd=dvd_join_acteurs.id_dvd)
  5. INNER JOIN dvd_lib_acteurs ON (dvd_join_acteurs.id_acteur=dvd_lib_acteurs.id_acteur)
  6. ORDER BY dvd_catalogue.titre
  7. LIMIT 10
  8. " );


 
Comment faire?


 
C'est que ta jointure n'est pas bonne , là il te fait un produit cartesien (ortho).
Retire ton limit tu verras que logiquement il t'envera la même chose mais avec plus de resultat. Le probleme se trouve au niveau de ta jointe.

n°1271293
will75012
Posté le 21-12-2005 à 14:38:26  profilanswer
 

Je sais que si j'enlève mon LIMIT il me retourne plus de résultats hors moi je veux 10 DVD comment faire? Si il y avait toujour 5 acteurs par DVD pas de problème je met le LIMIT à 50 et il me donne donc 10 DVD différents mais là se n'est pas possible comme des fois il y a qu'un acteurs (ou même pas dutout) et d'autre fois y en a une dizaine !

n°1271298
will75012
Posté le 21-12-2005 à 14:43:03  profilanswer
 

Voila à quoi ressemble mes tables :
 

Code :
  1. CREATE TABLE dvd_catalogue (
  2.   id_dvd int(9) NOT NULL auto_increment,
  3.   titre varchar(255) NOT NULL default '',
  4.   vo varchar(255) NOT NULL default '',
  5.   synopsis text NOT NULL,
  6.   public int(1) NOT NULL default '0'
  7. ) TYPE=MyISAM;


 

Code :
  1. CREATE TABLE `dvd_lib_acteurs` (
  2.   `id_acteur` int(9) NOT NULL auto_increment,
  3.   `acteur` varchar(100) NOT NULL default ''
  4. ) TYPE=MyISAM;


 

Code :
  1. CREATE TABLE dvd_join_acteurs (
  2.   id_dvd int(9) NOT NULL default '0',
  3.   id_acteur int(9) NOT NULL default '0'
  4. ) TYPE=MyISAM;


 

n°1271348
mrbebert
Posté le 21-12-2005 à 15:36:51  profilanswer
 

Quelle version de MySQL ?
 
Essaie en remplacant "FROM dvd_catalogue" par :
FROM (SELECT * FROM dvd_catalogue ORDER BY titre LIMIT 10) AS dvd_catalogue
 
Il faudra peut être utiliser un autre nom pour renommer.

n°1271353
cinocks
Posté le 21-12-2005 à 15:43:42  profilanswer
 

will75012 a écrit :

J'ai une requête mysql avec jointure sur 3 tables :
La table DVD et la table Acteurs et la table de relaction entre les DVD et les acteurs.
Un DVD peu biensur avoir plusieur acteurs...
Quand je met un LIMIT pour avoir seulement les 10 premiers résultats il me retourne :
 
...Comme elle respire > Marie Trintignant
...Comme elle respire > Guillaume Depardieu
...Comme elle respire > Jean-françois Stévenin
...Comme elle respire > Serge Riaboukine
...Comme elle respire > Blanchette Brunoy
...Comme elle respire > Michèle Moretti
1 Chance sur 2 > Jean-paul Belmondo
1 Chance sur 2 > Alain Delon
1 Chance sur 2 > Vanessa Paradis
1 Chance sur 2 > Eric Defosse
 
Hors moi je veux les 10 premier films et non pas les 10 premières paires !
 
 
Comment faire?


 
C'est normal qu'il te retourne ce resultat. Il retourne pour chaque film la liste des acteurs associée. Il contruit donc un ensemble de resultat et ne retourne que les 10 premieres paires.  
 
Pour avoir la liste des 10 premiers films, ca risque d'etre plus compliqué. Quelque chose du genre.
 

Code :
  1. SELECT dvd_catalogue.titre,dvd_catalogue.id_dvd,dvd_lib_acteurs.id_acteur,dvd_lib_acteurs.acteur
  2. FROM dvd_catalogue
  3. INNER JOIN dvd_join_acteurs ON (dvd_catalogue.id_dvd=dvd_join_acteurs.id_dvd)
  4. INNER JOIN dvd_lib_acteurs ON (dvd_join_acteurs.id_acteur=dvd_lib_acteurs.id_acteur)
  5. WHERE dvd_catalogue IN (SELECT dvd_catalogue.id_dvd FROM dvd_catalogue ORDER BY dvd_catalogue.titre LIMIT 10)
  6. ORDER BY dvd_catalogue.titre;


 
Là, la sous-requete definie la liste des id de films que tu veux prendre. Et le select retourne les acteurs.
 
Mais, certains diront que l'on peut le faire sans sous-requete.


---------------
MZP est de retour
n°1271354
cinocks
Posté le 21-12-2005 à 15:44:45  profilanswer
 

mrbebert a écrit :

Quelle version de MySQL ?
 
Essaie en remplacant "FROM dvd_catalogue" par :
FROM (SELECT * FROM dvd_catalogue ORDER BY titre LIMIT 10) AS dvd_catalogue
 
Il faudra peut être utiliser un autre nom pour renommer.


 
Tiens on peut faire ca avec MySql?


---------------
MZP est de retour
n°1271373
Berceker U​nited
PSN : berceker_united
Posté le 21-12-2005 à 16:14:02  profilanswer
 

A partir du 5 oui :jap: Quoi que il me semble qu'avec le 4. aussi  mais je me rappelle plus

n°1271411
mrbebert
Posté le 21-12-2005 à 17:11:24  profilanswer
 

Avec une version 4.1.10, ce genre de chose fonctionne :)

n°1271452
cinocks
Posté le 21-12-2005 à 18:10:58  profilanswer
 

c'est bon à savoir. Je vais devoir faire evoluer ma version une jour ou l'autrE.


---------------
MZP est de retour
mood
Publicité
Posté le 21-12-2005 à 18:10:58  profilanswer
 

n°1271557
will75012
Posté le 21-12-2005 à 21:33:11  profilanswer
 

J'ai la version 3.23.49 :(
Comment mettre a jour mysql dans easyPHP ?

n°1271563
Berceker U​nited
PSN : berceker_united
Posté le 21-12-2005 à 21:55:29  profilanswer
 

will75012 a écrit :

J'ai la version 3.23.49 :(
Comment mettre a jour mysql dans easyPHP ?


Perso j'aurais desinstallé eaysphp et reinstallé la dernier version. Normalement il concerve le repertoire /mysql/data et www/ mais par securité il faut sauvegarder ces deux repertoire. ce que je te dis c'est la methode la plus simple mais sinon je t'aurais conseillé de l'installer séparément.
php, apache, mysql  ainsi c'est plus facile à administrer les mise à jours.

Message cité 1 fois
Message édité par Berceker United le 21-12-2005 à 21:56:34
n°1271930
rufo
Pas me confondre avec Lycos!
Posté le 22-12-2005 à 16:49:52  profilanswer
 

j'ai peut-être pas compris ce que tu voulais au final, mais si tu ne veux que les films, un simple "select titre from dvd_catalogue limit 10" n'irait pas?

n°1271949
cinocks
Posté le 22-12-2005 à 17:02:04  profilanswer
 

C'est les 10 premiers films. Et pour chaque film la liste des acteurs.


---------------
MZP est de retour
n°1271965
will75012
Posté le 22-12-2005 à 17:21:15  profilanswer
 

Berceker United a écrit :

Perso j'aurais desinstallé eaysphp et reinstallé la dernier version. Normalement il concerve le repertoire /mysql/data et www/ mais par securité il faut sauvegarder ces deux repertoire. ce que je te dis c'est la methode la plus simple mais sinon je t'aurais conseillé de l'installer séparément.
php, apache, mysql  ainsi c'est plus facile à administrer les mise à jours.


 
J'ai la dernière version (la 1.8) et avec il y a la version 3.23.49 de mysql  :??:

n°1272221
Berceker U​nited
PSN : berceker_united
Posté le 23-12-2005 à 09:39:53  profilanswer
 

ha bon? Tien cela m'étonne. Alors je pense que tu peux quand même désinstaller mysql via le service windows et de le reinstaller de façon autonome.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Jointure et "LIMIT"

 

Sujets relatifs
Triple jointure MySQLOptimisation d'une jointure entre 3 tables
Jointure conditionnelleset time limit
Jointure sur des tables placé sur des SGBD différent, possible?[Oracle] Update avec jointure
[SqlServer] Jointure multi serveursdelete avec jointure
MySQL jointure directement dans MySQLAdminLIMIT $nb_debut, $nb_fin
Plus de sujets relatifs à : Jointure et "LIMIT"


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)