2 requettes SQL, 2 tables, 1 seul tableau PHP [Résolu/Fermé]

Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
- - Dernière réponse :  dreadoune - 25 mars 2009 à 11:47
Bonjour a tous,


Voici mon probleme:


J ai 2 requettes SQL sur 2 tables differentes :

//recupere l'ID du problem par rapport a l ID de l imprimante
$query= odbc_exec( $cnx, "select IDProblem from tbl_nbPrbl where IDImprimante=$IDimprimante" );
$IDproblem = odbc_result( $query, 1);


//recupere nom,description,nb de probleme de la tbl problem
$query2= odbc_exec( $cnx, "select Nom,Description,NbProblem from tbl_problem where IDImprimante=$IDimprimante" );


J aimerai afficher maintenant le resultat de ma 2 eme requetes.... je fait un

while(odbc_fetch_row($query2))
{
$IDproblem = odbc_result( $query, 1);
$nomProblem = odbc_result( $query2, 1);
$description = odbc_result( $query2, 2);
$NbProblem = odbc_result( $query2, 3);




Le probleme est que ma variable $IDproblem ne contient pas que un seul champ... je devrai faire une boucle pour que celle ci affiche tt les entrees mais si je fait une boucle avant ma deusieme requetes celle-ci sera elle meme "boucler" par la premiere boucle...

je ne sais pas du tout de quel cote chercher....


quelqu un aurait-il une idee ??


Merci beaucoup!
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
964
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
124
2
Merci
Ah ok ^^

Bon alors essaye ça comme requete :

select t1.IDProblem, t2.Nom, t2.Description, t2.NbProblem FROM tbl_nbPrbl t1 INNER JOIN tbl_problem t2 ON t1.IDProblem = t2.IDprbl WHERE IDImprimante=$IDimprimante"

Ca devrait fonctionner si IDprbl est une clé étrangère de IDProblem ! =)

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70154 internautes nous ont dit merci ce mois-ci

Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
1
1
Merci
Oui elles ont un lien par IDProblem...


Ma syntaxe est fausse ?? parce que la il me dit que la syntax jou pas....
CyPile
Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
1 -
voila le message il a un peu changer...



Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC Microsoft Access Driver] At most one record can be returned by this subquery., SQL state S1000 in SQLExecDirect in C:\wamp\www\ImprimanteProblem\resume.php on line 43
Messages postés
964
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
124
1
Merci
Ah oui pardon ... Remplace IDImprimante par t1.IDImprimante

Le problème est qu'il trouvait IDImprimante dans les deux tables, il fallait donc lui préciser dans laquelle il devait le prendre.

J'ai mis t1 mais tu devrais pouvoir mettre t2 et avoir le même résultat je pense ...

Sinon pour la clé primaire, le principe reste le même ^^

EDIT : par curiosité tu utilises quel SGBD?
Messages postés
964
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
124
1
Merci
Ooki bah c'est cool !

Bon courage pour la suite ! :)
Messages postés
964
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
124
0
Merci
Tu as essayé quelque chose du genre :

while(odbc_fetch_row($query2) or odbc_fetch_row($query2)) {


Je n'ai pas testé mais bon on ne sait jamais ^^
Si ça ne marche pas essaie avec and à la place de or (qui ne tente rien n'a rien ;) ^^ )
Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
Merci de ta reponse!


Malheureusement il aime pas du tout... lol


Je devrai peu etre plutot me diriger sur faire une seul requette... mais en faisant tout simplement


$query2= odbc_exec( $cnx, "select Nom,Description,NbProblem from tbl_problem where IDImprimante= ("select IDProblem from tbl_nbPrbl where IDImprimante=$IDimprimante") " );



Mais il aime pas non plus... il aime pas grand chose d ailleur..... lOol
Messages postés
964
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
124
0
Merci
Une question : est ce que tes deux tables ont un lien entre elles (ou toutes les deux liées à la même table ^^ )?

Parce que si c'est le cas, une requete suffira.

Quelques jointures et ça sera bon ! :)
Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
99
0
Merci
Fait tout en une seule requete !!!!

Et tu verras, tu te complikera bcp moins la vie !!!
Messages postés
964
Date d'inscription
mercredi 28 mai 2008
Statut
Contributeur
Dernière intervention
13 juin 2012
124
0
Merci
Ta requete devrait alors donner quelque chose du genre :

"select t1.IDProblem, t2.Nom, t2.Description, t2.NbProblem FROM tbl_nbPrbl t1 INNER JOIN tbl_problem ON t1.IDImprimante = t2.IDImprimante WHERE IDImprimante=$IDimprimante"


Ce que je ne comprends pas, ta table tbl_problem contient un IDImprimante, pourquoi ne pas afficher celui-là simplement?
Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
99
0
Merci
C'est ce que je t'ai di .. Vaut mieux faire une seule requete .. Et te complique pas à choisir ce que tu veux selectionner .. Fait un select * et on en parle plus lool !!!

Et ensuite tu récupere toute les données ke ta besoin ..

Compri ??
Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
Je me suis tromper la requete est comme ceci :


"select Nom,Description,NbProblem from tbl_problem where IDprbl=(select IDProblem from tbl_nbPrbl where IDImprimante=$IDimprimante)"


Non il contient pas IDImprimante... sa sera trop facile sinon lOol
Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
Merci de ta reponse!


c est le contraire en fait... la cle primaire est IDprbl... et non IDProblem...


sa me donne l erreur suivante...

The specified field 'IDImprimante' could refer to more than one table listed in the FROM clause of your SQL statement., SQL state S1000 in SQLExecDirect in C:\wamp\www\ImprimanteProblem\resume.php on line 47
Messages postés
22
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
Sa marche!!!!!!


tu as assurer merci... j ai appris c est truc mais c etai y a bien lgt lOol..


J ai honte... c est une base Access.... (bon en mm temps ya pas plus de 20 entrees... )


Merci beaucoup en tt cas... et bonne apre midi
0
Merci
Salut
J'ai un peu pres le meme probleme mais ca ne fontionne pas chez moi

2 tables : contacts / prospection
cle primaire contacts = id_clients
cle primaire prospection =id_prospects

j'ai besoin de mettre à jour les 2 tables en meme temps depuis les données d'un formulaire que je recuperes.
id = Request.QueryString("id")


la requête :

sql = "SELECT contacts.id_clients, prospection.id_clients FROM contacts INNER JOIN prospection ON contacts.id_clients = prospection.id_clients WHERE id_clients=" & id"


erreur retournée :

Unterminated string constant

/test/prospection/maj-contactsOk.asp, line 42

sql = "SELECT contacts.id_clients, prospection.id_clients FROM contacts INNER JOIN prospection ON contacts.id_clients = prospection.id_clients WHERE id_clients=" & id"
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------^


Si kkun a une idee Svp ?
merci