probleme de jointure

probleme de jointure - PHP - Programmation

Marsh Posté le 16-06-2004 à 18:17:47    

Bonjour,
 
j'ai une requete comme ça :
 

Code :
  1. $sql = "SELECT   bla1, bla2, count(*) as total
  2.   FROM     table1
  3.   where date_max >= '$date_lim'
  4.   group by bla1
  5.   order by total desc limit 1
  6.   ";


 
cette requete marche très bien  :)  mais là je veux en plus selectionner une autre table dans la requete
 
je veux ajouter  
 
select * from table2 dans la requete du dessus.
 
j'ai cherché dans la doc les jointures mais j'ai pas franchement compris le principe et j'ai fais quelques essais mais à chaque fois ça foire !
 
est ce que quelqu'un sait comment faire ça ?
 
merci d'avance
 
@+

Reply

Marsh Posté le 16-06-2004 à 18:17:47   

Reply

Marsh Posté le 16-06-2004 à 18:38:54    

Comprend pas tu veux que ta requete ait quel tete au final tu veux faire quoi ?
Tu veux faire une jointure entre deux table ou une requette dans une requette?


Message édité par Berceker United le 16-06-2004 à 18:39:29
Reply

Marsh Posté le 16-06-2004 à 18:56:22    

salut,
 
en fait je veux garder ma première requete (celle qui est écrite)
 
et dedans je veux rajouter la deuxième qui est select * from table2
 
faire un truc du genre :
 

Code :
  1. $sql = "SELECT table2.*,  bla1, bla2, count(*) as total 
  2.     FROM     table1
  3.     where date_max >= '$date_lim'
  4.     group by bla1
  5.     order by total desc limit 1
  6.     ";


 
mais bon ça c'est faux. je veux une jointure entre mes 2 tables mais comme c'est une requete compliqué et que j'y connais pas grand chose en jointures j'y arrive pas !
 
merci beaucoup d'avance
 
@+


Message édité par worldcinemag le 16-06-2004 à 19:24:37
Reply

Marsh Posté le 16-06-2004 à 19:11:14    

quel intérêt ?
 soit tu fais 2 requêtes séparées, soit tu fais une jointure qui va bien sur des champs qui sont concus a cet effet


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 19:24:26    

bah en fait dans ma table1 je n'ai pas toutes les infos necessaires donc je dois aller les chercher dans la table2, la table2 sert juste pour compléter la table1, ce n'est pas sur elle que je veux faire la requete.
 
et donc c'est la que ça coince je ne vois pas comment faire !
 
j'espère que vous avez compris !
 
merci beaucoup

Reply

Marsh Posté le 16-06-2004 à 19:28:45    

ben si t'as des infos dans la table 2 qui complètent ta table 1, il faut faire la jointure entre les champs dans table 1 et table 2 qui servent de clés, i.e. qui permettent de relier les 2 tables ...

Reply

Marsh Posté le 16-06-2004 à 20:43:49    

Qu'elle est le point commun entre les deux table et peux tu me montrer tes deux requette je pourrais te faire une requette avec cela

Reply

Marsh Posté le 16-06-2004 à 22:46:35    

alors voici la première requete :
 

Code :
  1. $sql = "SELECT   bla1, bla2, count(*) as total 
  2.     FROM     table1
  3.     where date_max >= '$date_lim'
  4.     group by bla1
  5.     order by total desc limit 1
  6.     ";


 
et la deuxième :

Code :
  1. select * from table2


 
les deux tables en ont commun le bla1.
 
merci beaucoup !

Reply

Marsh Posté le 16-06-2004 à 22:52:23    

Fait la liste des champs de chaque table stp

Reply

Marsh Posté le 16-06-2004 à 22:54:51    

bah pour rester dans le vague tu prends pour la table2 par exemple
champ1
champ2
champ3
j'adapterai ensuite
 
et la table1
champ1 > corrélation avec l'autre champ1
bla2
bla3
 
voila j'espère que c ça !
 
merci encore

Reply

Marsh Posté le 16-06-2004 à 22:54:51   

Reply

Marsh Posté le 16-06-2004 à 23:47:46    

qqn a un article qui explique comment fonctionne un sgdb du cote bas niveau pour traite une requete ?

Reply

Marsh Posté le 16-06-2004 à 23:54:16    

Reply

Marsh Posté le 17-06-2004 à 00:04:01    

worldcinemag a écrit :

bah pour rester dans le vague tu prends pour la table2 par exemple
champ1
champ2
champ3
j'adapterai ensuite
 
et la table1
champ1 > corrélation avec l'autre champ1
bla2
bla3
 
voila j'espère que c ça !
 
merci encore


 

Code :
  1. $sql = "SELECT table2.*,  table1.*, count(table1.*) as total 
  2.       FROM table1 
  3.       LEFT OUTER JOIN table2 ON table1.champ1=table2.champ_de_jointure
  4.       where date_max >= '$date_lim' 
  5.       group by bla1 
  6.       order by total desc limit 1 
  7.       ";


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-06-2004 à 14:09:01    

salut,
 
désolé pour le retard  :ange:  
 
en fait j'arrive pas à faire marcher ma requete il me met que c'est ambigu pour orber by, enfin voici la requete :
 

Code :
  1. SELECT content_film.*, top_fiches.*, count(top_fiches.id_fiche) as total 
  2.         FROM top_fiches 
  3.         LEFT OUTER JOIN content_film ON top_fiches.id_fiche=content_film.id_fiche 
  4.         where date_max >= '$date_lim' 
  5.         group by id_fiche 
  6.         order by total desc limit 1


 
et donc il me sort ça :
 
Column: 'id_fiche' in group statement is ambiguous
 
j'ai essayé de faire group by top_fiches.id_fiche mais ça fait planter le serveur, j'ai aussi essayé de rajouter des parenthèses mais ça change quedal !
 
voila si t'as la solution merci beaucoup !  

Reply

Marsh Posté le 18-06-2004 à 14:46:58    

group by top_fiches.id_fiche :)

Reply

Marsh Posté le 18-06-2004 à 14:48:07    

j'ai fait aussi le group by top_fiches.id_fiche mais le serveur plante ! donc c pas ça !
 
merci quand meme

Reply

Marsh Posté le 18-06-2004 à 15:17:52    

postes nous les 2 tables avec leur champs respectifs


Message édité par simogeo le 18-06-2004 à 15:20:11

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-06-2004 à 15:42:39    

alors la table content_film contient en gros :
 
id_fiche
film
film_vo
histoire
... vais pas tous les faire, c trop long
 
et la table top_fiches
id_fiche
film
date_max
 
voila
encore merci !

Reply

Marsh Posté le 18-06-2004 à 16:16:18    

en fait c'est ton order by qui ne veut rien dire .....
 
essayes :
 
SELECT content_film.*, top_fiches.*, count(top_fiches.id_fiche) as total    
          FROM top_fiches    
          LEFT OUTER JOIN content_film ON top_fiches.id_fiche=content_film.id_fiche  
          where date_max >= '$date_lim'    
          group by top_fiches.id_fiche      
 
 
pour voir ce que ca donne


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-06-2004 à 16:20:01    

nan ça marche pas non plus, le serveur se met à ramer à mort !
ça se complique ! :-)

Reply

Marsh Posté le 18-06-2004 à 16:23:19    

le group by aussi ne veut rien dire ... tu veut afficher toutes les infos d'une table (content_film.*, etc.) en groupant les données !
 
Le mieux ce serait que tu expliques en français le résultat que tu veux avoir, ce sera plus simple.

Reply

Marsh Posté le 18-06-2004 à 16:23:42    

très étonnant, ca n'a rien de compliqué .... c'est une requête de base .....
 
EXPLAIN SELECT content_film.*, top_fiches.*, count(top_fiches.id_fiche) as total    
          FROM top_fiches    
          LEFT OUTER JOIN content_film ON top_fiches.id_fiche=content_film.id_fiche  
          where date_max >= '$date_lim'    
          group by top_fiches.id_fiche      


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed