Requete sql select into
Fermé
CHUM2021
-
28 juil. 2021 à 16:44
yg_be Messages postés 23482 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mars 2025 - 1 août 2021 à 11:09
yg_be Messages postés 23482 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mars 2025 - 1 août 2021 à 11:09
7 réponses
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 739
28 juil. 2021 à 18:15
28 juil. 2021 à 18:15
Bonjour
Aucun problème au niveau des requêtes sql...
Le souci se trouve dans le code php à la ligne 61 ...
C'est cette ligne qu'il faut regarder...
Undeclared variable: tab_tmp in C:\wamp\www\Gestion Urgences Medico-Chirurgicaux - Copie\admin\malades\page_lstmal_medecin.php on line 61
Aucun problème au niveau des requêtes sql...
Le souci se trouve dans le code php à la ligne 61 ...
C'est cette ligne qu'il faut regarder...
Bonjour
Merci pour votre réponse.
la ligne 61 dans mon code correspond à la ligne 3 du code que j'ai publié
c-a-d
$result_requete_tmp=$pdo->query($requete_tmp);
Donc je ne vois pas où est l'erreur.
Merci pour votre réponse.
la ligne 61 dans mon code correspond à la ligne 3 du code que j'ai publié
c-a-d
$result_requete_tmp=$pdo->query($requete_tmp);
Donc je ne vois pas où est l'erreur.
yg_be
Messages postés
23482
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mars 2025
1 568
29 juil. 2021 à 10:23
29 juil. 2021 à 10:23
As-tu remarqué que la variable mentionnée dans le message d'erreur est absente dans la ligne de code que tu nous montres? Tu ne nous montres donc sans doute pas la bonne ligne 61.
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 739
29 juil. 2021 à 10:21
29 juil. 2021 à 10:21
Je n'avais pas bien lu ta ligne de code..
Dans une requête SELECT c'est un from qu'il faut mettre et non pas un into
Dans une requête SELECT c'est un from qu'il faut mettre et non pas un into
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
526
29 juil. 2021 à 10:34
29 juil. 2021 à 10:34
Bonjour,
Pour que la deuxième requête puisse utiliser la table créée dans la première requête, il me semble que ces deux requêtes doivent être exécutées dans la même transaction (par exemple via un seul appel à $pdo->query()).
Je n'ai pas testé mais tu peux essayer d'exécuter des deux requêtes à la suite comme ceci :
Ou d'inclure directement ta première requête dans la seconde :
Au passage, il faudrait idéalement protéger les requêtes contre les injections sql avec la fonction quote() de PDO ou en utilisant des requêtes préparées.
Bonne journée,
Pour que la deuxième requête puisse utiliser la table créée dans la première requête, il me semble que ces deux requêtes doivent être exécutées dans la même transaction (par exemple via un seul appel à $pdo->query()).
Je n'ai pas testé mais tu peux essayer d'exécuter des deux requêtes à la suite comme ceci :
$requete ="SELECT idmalade, idbox INTO tab_tmp FROM f_consulte WHERE idbox=$boxx; SELECT distinct M.idmalade, C.idbox,M.nom_malade,M.prenom_malade,M.dat_nais_malade,M.genre_malade,M.date_arrivee,M.heure_arrivee,B.box FROM f_consulte C,f_malade_consulte M,box B, tab_tmp T WHERE C.orientation_box=B.id AND C.idmalade=M.idmalade AND C.idmalade!=T.idmalade"; $result=$pdo->query($requete);
Ou d'inclure directement ta première requête dans la seconde :
$requete ="SELECT distinct M.idmalade, C.idbox,M.nom_malade,M.prenom_malade,M.dat_nais_malade,M.genre_malade,M.date_arrivee,M.heure_arrivee,B.box FROM f_consulte C,f_malade_consulte M,box B, (SELECT idmalade, idbox FROM f_consulte WHERE idbox=$boxx) T WHERE C.orientation_box=B.id AND C.idmalade=M.idmalade AND C.idmalade!=T.idmalade"; $result=$pdo->query($requete);
Au passage, il faudrait idéalement protéger les requêtes contre les injections sql avec la fonction quote() de PDO ou en utilisant des requêtes préparées.
Bonne journée,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour votre réponse
je vais essayer les 02 solutions que vous m'avez prposées et vous rendre la réponse
je vais essayer les 02 solutions que vous m'avez prposées et vous rendre la réponse
Bonjour Pitet
j'ai essayé la 2eme solution, le message d'erreur n'est plus affiché, donc j'ai eu un résultat mais je n'ai pas eu le résultat attendu de l'execution de la requete .
en effet la condition " AND C.idmalade!=T.idmalade" n'est pas vérifiée car je pense qu'il n' y a pas de jointure entre la table ayant l'alias C et celle ayant l'alias T resultant de l'execution de la requete.
Donc, comme je ne m'y connais pas trop en jointures, est ce que vous pouvez m'aider à résoudre ce problème.
Merci d'avance pour votre aide
j'ai essayé la 2eme solution, le message d'erreur n'est plus affiché, donc j'ai eu un résultat mais je n'ai pas eu le résultat attendu de l'execution de la requete .
en effet la condition " AND C.idmalade!=T.idmalade" n'est pas vérifiée car je pense qu'il n' y a pas de jointure entre la table ayant l'alias C et celle ayant l'alias T resultant de l'execution de la requete.
Donc, comme je ne m'y connais pas trop en jointures, est ce que vous pouvez m'aider à résoudre ce problème.
Merci d'avance pour votre aide
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
526
29 juil. 2021 à 17:23
29 juil. 2021 à 17:23
Difficile de donner une requête sql correcte sans comprendre comment sont organisées les données dans la base et sans savoir quel est le résultat attendu. Il faudrait préciser quelles sont les données enregistrés dans chaque table, à quoi elles correspondent et quelles sont les relations entre ces tables (avec un exemple idéalement).
Pour essayer de te guider un minimum : puisque l'identifiant du malade est présent dans les tables f_consulte et f_malade_consulte, tu peux donc utiliser ce champ pour réaliser la jointure. Un exemple pour te montrer la syntaxe d'une jointure :
Tu trouveras des explications plus claires et plus complètes sur les jointures ici : https://sql.sh/cours/jointures
Si ce n'est pas déjà le cas, essayes d'utiliser un client sql (PhpMyAdmin, HeidiSQL, etc...) pour te concentrer uniquement sur la partie SQL afin de construire la requête étape par étape (faire une première jointure entre les tables f_malade_consulte et f_consulte, puis ajouter une seconde jointure pour la table box, puis ajouter les conditions dans la clause WHERE, ...).
Lorsque la requête sql correspondra au résultat attendu, tu pourras alors l'implémenter dans ton code PHP.
Pour essayer de te guider un minimum : puisque l'identifiant du malade est présent dans les tables f_consulte et f_malade_consulte, tu peux donc utiliser ce champ pour réaliser la jointure. Un exemple pour te montrer la syntaxe d'une jointure :
SELECT M.idmalade, M.nom_malade, M.prenom_malade, C.idbox FROM f_malade_consulte M LEFT JOIN f_consulte C ON C.idmalade != M.idmalade WHERE C.idbox = 5
Tu trouveras des explications plus claires et plus complètes sur les jointures ici : https://sql.sh/cours/jointures
Si ce n'est pas déjà le cas, essayes d'utiliser un client sql (PhpMyAdmin, HeidiSQL, etc...) pour te concentrer uniquement sur la partie SQL afin de construire la requête étape par étape (faire une première jointure entre les tables f_malade_consulte et f_consulte, puis ajouter une seconde jointure pour la table box, puis ajouter les conditions dans la clause WHERE, ...).
Lorsque la requête sql correspondra au résultat attendu, tu pourras alors l'implémenter dans ton code PHP.
Bonjour Pitet
Merci pour ta réponse.
il y a juste un détail que je veux comprendre:
est ce qu'on peut faire cette jointure même si le champ idmalade n'est pas une clé primaire ni un index
et aussi meme si la partie droite de la jointure n'est pas une table mais c'est le résultat d'une requete.
Merci pour ta réponse.
il y a juste un détail que je veux comprendre:
est ce qu'on peut faire cette jointure même si le champ idmalade n'est pas une clé primaire ni un index
et aussi meme si la partie droite de la jointure n'est pas une table mais c'est le résultat d'une requete.
yg_be
Messages postés
23482
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mars 2025
1 568
1 août 2021 à 11:09
1 août 2021 à 11:09
oui, on peut.
est-ce que cela est autorisé et utile dans ton cas, impossible de le dire, tu ne nous as donné aucune information utile.
est-ce que cela est autorisé et utile dans ton cas, impossible de le dire, tu ne nous as donné aucune information utile.