Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 06/12/2010, 14h04   #1
Invité de passage
 
Inscription : octobre 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 8
Points : 2
Points : 2
Par défaut récuperation de donnée

Bonjour à tous,
premièrement je voulais m'excuser le titre du poste est très approximatif, j'ai pas mieux sous la main.
Je suis loin d'être expérimenter en SQL cependant j'ai un souci.
j'ai 2 tables :
Table1 et Table2 défini comme suite :

Table1:
id
nombre
champ1

Table2:
id
table1_id
champ1
champ2

On a une relation 1-n entre Table1 et Table2.

je cherche à récupérer x (le champ nombre de Table1) element de Table2 qui sont lier à Table1 par.
Mais en meme temps j'ai besoin de y (le champ nombre de Table1) element de Table2.

Je pourrai faire une 1er requête qui me renvoie la liste de Table1 puis requête tour à tour Table2 mais les 200enregistrements sur Table1 me disent que c'est pas une bonne idée.

Je cherche donc une solution à base de jointure/sous requête/union valide pour faire ceci.
Je croie que ce problème pousse mes connaissance en SQL à bout :/
Pour info si ca peux aidée, l'appel ce fait en PHP(avec doctrine).
Onime Records est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 14h17   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

Citation:
Envoyé par Onime Records Voir le message
On a une relation 1-n entre Table1 et Table2.
1-n entre Table1 et Table2 et entre Table2 et Table1 ? Si oui, l'introduction d'une table de jonction ou d'association est généralement préconisée pour garantir l'intégrité et simplifier les requêtes.

Citation:
Envoyé par Onime Records Voir le message
les 200enregistrements sur Table1 me disent que c'est pas une bonne idée.
200 enregistrements c'est pinuts pour une table

Je n'ai pas trop compris ton besoin, mais connais tu la syntaxe des jointures ? Il faudra tout d'abord que tu jointes ces 2 tables via Table1.id et Table2.table1_id via INNER JOIN, LEFT JOIN ou RIGHT JOIN.

Je suis preneur d'une meilleur explication sinon
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 15h00   #3
Invité de passage
 
Inscription : octobre 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 8
Points : 2
Points : 2
je vais tenter mieux alors

alors oui je connais les jointures.
Pour la relation entre Table2 et Table1 je dirais une relation 1-1(mais je suis pas sur de mon coup)
Pour 1 entrée donné dans Table2 il n'y en à que une dans Table1.

Mon but et est récupéré une liste de la forme :

table1.id,table1.champ1,table2.id,table2.champ1,table2.champ2
avec x(table1.nombre ligne pour chaque entrée de table 1
pour l'instant j'ai fait 2requêtes :

Code :
1
2
SELECT t1.id,t1.nombre FROM Table1 t1
Pour récupérer les id et nombre.
puis dans une boucle(en PHP) je fait :

Code :
1
2
3
4
5
SELECT t1.id,t1.champ1,t2.id,t2.champ1,t2.champ2
FROM Table2 t2
JOIN Table1 t1 ON t1.id = t2.table1_id
WHERE t2.table1_id = $id
LIMIT($nb);
avec $id qui l'id courant de Table1 et $nb qui et le champ nombre correspondant


disons que dans table1 on a 2 enregistrements
id nombre
1 3
2 2

je cherche à avoir :

Code :
1
2
3
4
5
1,table1.champ1,8,table2.champ1,table2.champ2
1,table1.champ1,9,table2.champ1,table2.champ2
1,table1.champ1,10,table2.champ1,table2.champ2
2,table1.champ1,20,table2.champ1,table2.champ2
2,table1.champ1,21,table2.champ1,table2.champ2
Cette solution ne me plait gere car le script est très lent(+/-1sec pour exécuter juste cette portion de code)

je sais pas si c'est plus claire, en tout cas je l'espere
Onime Records est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 21h35   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonsoir,

je ne comprends pas pourquoi tu récupères pas tous les id par la requête ou à défaut une liste via IN puis que tu ne traites pas ton bloc recu via php ?
En gros une requête et X traitements php plutot que X requêtes et un traitement php ?

Les allers-retours serveurs sont couteux en temps...
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 13h41   #5
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

pourquoi ne pas tout récupérer d'un seul coup avec votre deuxième requete sans le filtre ?

Code sql :
1
2
3
4
 
SELECT *
FROM Table1
JOIN Table2 ON Table1.ID = Table2.Table1_ID
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 13h54   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 967
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 : 10 967
Points : 18 197
Points : 18 197
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par Onime Records Voir le message
Pour la relation entre Table2 et Table1 je dirais une relation 1-1(mais je suis pas sur de mon coup)
Pour 1 entrée donné dans Table2 il n'y en à que une dans Table1.
Mais d'après le résultat souhaité, je dirais que pour une ligne (et pas entrée !) de Table1, il peut y avoir plusieurs lignes de Table2 non ?

Autrement dit, on a le morceau de MCD suivant :
Table1 -0,n----Associer----1,1- Table2

Dès lors, il suffit de faire une jointure interne entre les deux tables :
Code :
1
2
3
4
SELECT t1.id, t1.col1, t2.id, t2.col1, t2.col2
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t2.table1_id = t1.id
ORDER BY t1.id
Et je ne vois pas ce que vient faire la colonne (et pas champ !) nombre dans la table 1 par rapport aux données de la table 2 !

Avec une explication plus concrète et la réelle structure des tables, ce serait plus facile de t'aider.
__________________
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 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web