Rechercher : dans
Par :

2 requettes SQL, 2 tables, 1 seul tableau PHP

Dernière réponse le 25 mar 2009 à 11:47:14 CyPile, le 29 jan 2009 à 11:39:49 
 Signaler ce message aux modérateurs

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!

Configuration: Windows XP
Firefox 3.0.5

1

Passarinho44, le 29 jan 2009 à 12:05:06

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 ;) ^^ )

Répondre à Passarinho44

2

CyPile, le 29 jan 2009 à 12:15:08

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

Répondre à CyPile

3

Passarinho44, le 29 jan 2009 à 12:19:26

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 ! :)

Répondre à Passarinho44

4

974_Vin's_974, le 29 jan 2009 à 12:20:34

Fait tout en une seule requete !!!!

Et tu verras, tu te complikera bcp moins la vie !!! [' Tu tr0uveras t0uj0urs plus f0rt que t0i ']

Répondre à 974_Vin's_974

5

CyPile, le 29 jan 2009 à 12:23:55

Oui elles ont un lien par IDProblem...


Ma syntaxe est fausse ?? parce que la il me dit que la syntax jou pas....

Répondre à CyPile

8

CyPile, le 29 jan 2009 à 12:27:43

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

Répondre à CyPile

6

Passarinho44, le 29 jan 2009 à 12:27:28

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?

Répondre à Passarinho44

7

974_Vin's_974, le 29 jan 2009 à 12:27:29

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 ?? [' Tu tr0uveras t0uj0urs plus f0rt que t0i ']

Répondre à 974_Vin's_974

9

CyPile, le 29 jan 2009 à 12:33:17

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

Répondre à CyPile

10

Passarinho44, le 29 jan 2009 à 13:28:10
  • +2

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 ! =)

Répondre à Passarinho44

11

CyPile, le 29 jan 2009 à 13:54:26

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

Répondre à CyPile

12

Passarinho44, le 29 jan 2009 à 13:59:24
  • +1

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?

Répondre à Passarinho44

13

CyPile, le 29 jan 2009 à 14:07:47

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

Répondre à CyPile

14

Passarinho44, le 29 jan 2009 à 14:20:40
  • +1

Ooki bah c'est cool !

Bon courage pour la suite ! :)

Répondre à Passarinho44

15

 dreadoune, le 25 mar 2009 à 11:47:14

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

Répondre à dreadoune