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 08/08/2011, 16h02   #1
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Par défaut Réalisation d'une requête

Bonjour à tous,

Voilà je viens vers vous pour vous demander conseil et savoir si ma demande est possible.

J'ai dans ma base de données plusieurs tables dont une table où les données sont affichées en lignes cad :

table1:
id : equipement1 : equipement2 : equipement3

et dans ma table 2 :
EquipementA : EquipementB : EquipementC

Je voudrais faire une requête lorsque EquipementC = un des équipements de la table1, et afficher les équipement A,B,C

Merci d'avance
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 16h34   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
un conseil ?? revoyez votre modele de données ...

Citation:
table1:
id : equipement1 : equipement2 : equipement3
Le jour ou vous rajouterez un autre equipement, vous allez faire comment ?

De plus, pour vos requetes, ca va etre beaucoup plus compliqué.

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/08/2011, 16h36   #3
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Bonjour, disons que je reçois le fichier comme ceci c'est pour ça que j'essaie de faire une requête pour le récupérer
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 16h46   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Le format du flux de vos données d'entrées ne devrait pas être en relation avec votre modèle de données : vous devriez être capable de gérer votre flux d'entrée pour fournir à votre modèle des données cohérentes (ou alors petite flem du developpeur pour ne pas avoir à traiter les données d'entrées).

Bref, pour votre cas, une requête du genre

Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
	EquipementA,
	EquipementB,
	EquipementC
FROM
	Table2 
INNER JOIN
	Table1
ON (  
	Table2.EquipementC =Table1.equipement1 OR 
	Table2.EquipementC =Table1.equipement2 OR
	Table2.EquipementC = Table1.equipement3)
devrait vous aider.

Cependant,réfléchissez quand même à la possibilité de modifier votre modèle de données afin de rendre votre application plus évolutive et votre code moins complexe.

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/08/2011, 12h13   #5
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Bonjour, et merci de tes réponses rapides, je t'ai écouté et j'ai reformulé mon fichier comme ceci

ID/Équipements

J'ai réussi à tester toutes les différentes informations que je souhaitais via phpmyadmin mais quand je recopie les informations sur mon script PHP j'ai une erreur qui apparait à cause du tampon j'imagine, mais je nevois pas comment régler le problème

Citation:
Erreur :SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
Code :
1
2
3
4
5
6
7
8
 
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[PDO::MYSQL_ATTR_USE_BUFFERED_QUERY] = TRUE;
$bdd = new PDO('mysql:host=localhost;dbname=maee', 'root', '1234', $pdo_options);
 
$reponse3 = $bdd->query("CREATE TEMPORARY TABLE temp SELECT Equipement1 , EquipementB FROM test2, zone WHERE EquipementB = '$test' AND ID = NOM GROUP BY Equipement1; SELECT sum(nombre) AS clients FROM temp, test WHERE Equipement1 = EquipementA;");
 
$reponse2 = $bdd->query("CREATE TEMPORARY TABLE temp2 SELECT Equipement1 , EquipementB FROM test2, zone WHERE EquipementB = '$test' AND ID = NOM GROUP BY Equipement1; SELECT sum(connexion) AS Connexion FROM temp2, details WHERE Equipement1 = Equipement;");
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h12   #6
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
enlevez vos ";" à la fin de vos instructions SQL :

Code :
$reponse3 = $bdd [...] WHERE Equipement1 = EquipementA;");
Je pense que cela vient de cela...

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h22   #7
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Je viens de modifier mon code mais cela ne change rien au message d'erreur
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h35   #8
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Vous n'avez pas un curseur qui n'a pas été fermé dans votre code ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h40   #9
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
J'en suis sûr, c'est la première fois que j'utilise les tables temporaires avec php.

Je pense que le problème vient de là

Car comme je l'ai dis les requêtes fonctionnent à merveille avec phpmyadmin
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h47   #10
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Le pb est que vous mettez plusieurs instructions SQL dans vos QUERY !!
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h49   #11
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Comment faire alors pour résoudre ce problème,
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 17h28   #12
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Ne pas passer par une table temporaire, ramener vos données avec 1 seule requête
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 21h06   #13
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Le problème si je ne passe pas par la table temporaire, il me donne une somme trop importante, pourquoi? car il récupère 4/5 fois le nom de l'équipement et donc au final la somme est faussée. Alors qu'en passant par la table temporaire il me ressort juste le bon nombre d'équipements.

Il doit bien avoir un moyen de pouvoir utiliser la table temporaire avec PHP, le tout est de savoir comment?

C'est quand même dommage de se faire brider par php
Atchoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 09h59   #14
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Le problème est donc bien la réalisation de votre requête. Vous essayez de passer par un artifice (table temporaire) pour essayer de contourner votre problème et pas pour essayer de le résoudre.

Dans vos requêtes, vous avez les tables test2 et test. Comment sont-elles définies ? Dites en plus sur votre modèle de données.

Vous pouvez, pour commencer, supprimer l'utilisation de votre table temporaire, en en faisant une sous-requête de votre 2eme requête. Mais je pense que votre requête est à revoir, afin de la simplifier et l'optimiser.
Cependant, avec le peu d'info que vous donnez, ce n'est pas simple.

Ex d'utilisation de sous-requête


Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT
	SUM (nombre) AS clients
FROM
	( SELECT 
		Equipement1
	  FROM
		test2 INNER JOIN zone ON (ID=NOM) 
	  WHERE
 		EquipementB='$test') t1
INNER JOIN test ON (t1.Equipement1 = test.EquipementA)
GROUP BY t1.Equipement1
Si vous voulez plus d'aide, et surtout cibler vos erreurs, une définition de vos tables, un jeu d'essai de vos données et un résultat attendu seraient les bienvenus.

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h45   #15
Invité de passage
 
Inscription : janvier 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 22
Points : 2
Points : 2
Voici comment est composée ma base, toutes les valeurs qui sont dans les bases sont fictives.

Fichier base.jpg

Il faut que zone.NC = ‘Valeur’ et que zone.Boucle = Test2.BoucleGE et n’avoir qu’une seule valeur de Routeurs. Cela nous donne ceci :


Premieressai.png



Car il peut y avoir plusieurs BAS qui pointent sur la table Test2. Et donc nous ressortir plusieurs fois le nom des Routeurs


Deuxièmeessai.png


Maintenant si je mets en place ta formule avec le double select imbriqué


Code :
1
2
3
4
5
6
7
8
9
 
SELECT
                  SUM(TV) AS TV
  FROM
                  (SELECT Routeurs
                    FROM test2 INNER JOIN zone ON (BoucleGE=Boucle) 
                    WHERE NC='NCNAN201') t1
  INNER JOIN occupation_ne ON (t1.Routeurs = occupation_ne.Routeur)
  GROUP BY t1.Routeurs
exemple.png


Et à ma façon en passant par la table temporaire donc la première requête + la somme cela nous donne ceci


Final.png


Voilà je pense que j'ai tour marqué pour que mon problème soit résolu.


En tout cas encore merci Yanika_bzh
Images attachées
Type de fichier : png Deuxiemeessai.png (95,8 Ko, 1 affichages)
Type de fichier : jpg Base.JPG (21,6 Ko, 2 affichages)
Type de fichier : png exemple.png (5,1 Ko, 1 affichages)
Type de fichier : png final.png (931 octets, 9 affichages)
Type de fichier : png Premieressai.png (8,1 Ko, 1 affichages)
Atchoum89 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 07h58.


 
 
 
 
Partenaires

Hébergement Web