[PSQL] : pb avec requete imbriquee
Résolu
lamia2
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Fille64 -
Fille64 -
Bonjour,
Je n'arrive pas à faire fonctionner une requete imbriquee qui utilise des alias de tables.
Le premier et le dernier "SELECT" fonctionnent quand je les lance seuls. Le problème
vient de la deuxième sous-requete où psql ne reconnait pas l'attibut "resultat.valeur".
Après plusieurs essais differents, je ne vois toujours pas ce qui cloche... Est-ce que l'un d'entre-vous pourrait m'eclairer ?
Merci d'avance
SELECT a.libelle FROM matable b, matable a WHERE b.libelle='pieton2' AND Distance(b.the_geom,a.the_geom)=(SELECT min(resultat.valeur) FROM (SELECT c.libelle AS nom,Distance (d.the_geom,c.the_geom) AS valeur FROM matable d, matable c WHERE d.libelle='pieton2' AND c.libelle!='pieton2') resultat);
Je n'arrive pas à faire fonctionner une requete imbriquee qui utilise des alias de tables.
Le premier et le dernier "SELECT" fonctionnent quand je les lance seuls. Le problème
vient de la deuxième sous-requete où psql ne reconnait pas l'attibut "resultat.valeur".
Après plusieurs essais differents, je ne vois toujours pas ce qui cloche... Est-ce que l'un d'entre-vous pourrait m'eclairer ?
Merci d'avance
SELECT a.libelle FROM matable b, matable a WHERE b.libelle='pieton2' AND Distance(b.the_geom,a.the_geom)=(SELECT min(resultat.valeur) FROM (SELECT c.libelle AS nom,Distance (d.the_geom,c.the_geom) AS valeur FROM matable d, matable c WHERE d.libelle='pieton2' AND c.libelle!='pieton2') resultat);
9 réponses
Bonjour
Kristoff n'est pas très constructif.
J'imagine qu'on cherche le point (le pieton ?) le plus proche de "pieton2". La sous-requête nous renvoit donc la plus petite "distance" entre pieton2 et un autre point présent dans matable. On cherche ensuite quels sont les enregistrements qui correspondent à cette "distance"
Essaye de ré-écrire ta requête comme ça :
SELECT a.libelle FROM matable b, matable a
WHERE b.libelle='pieton2'
AND Distance(b.the_geom,a.the_geom)=
(
SELECT Min(Distance (d.the_geom,c.the_geom)) FROM matable d, matable c
WHERE d.libelle='pieton2' AND c.libelle!='pieton2') ;
Par curiosité, à quoi servira cette requête ?
Kristoff n'est pas très constructif.
J'imagine qu'on cherche le point (le pieton ?) le plus proche de "pieton2". La sous-requête nous renvoit donc la plus petite "distance" entre pieton2 et un autre point présent dans matable. On cherche ensuite quels sont les enregistrements qui correspondent à cette "distance"
Essaye de ré-écrire ta requête comme ça :
SELECT a.libelle FROM matable b, matable a
WHERE b.libelle='pieton2'
AND Distance(b.the_geom,a.the_geom)=
(
SELECT Min(Distance (d.the_geom,c.the_geom)) FROM matable d, matable c
WHERE d.libelle='pieton2' AND c.libelle!='pieton2') ;
Par curiosité, à quoi servira cette requête ?
Heu... excuse moi, mais, tu débute en SQL ? non ?
Elle ne veut rien dire cette requete !
En plus, je pense que tu cherche tres compliqué. Il y a surement plus simple pour obtenir le résultat.
Elle ne veut rien dire cette requete !
En plus, je pense que tu cherche tres compliqué. Il y a surement plus simple pour obtenir le résultat.
Bonjour,
MERCI pour ta réponse.
J'ai corrigé ma requête selon ta proposition et cela fonctionne. J'obtiens bien le résultat que je recherchais. C'est-à-dire quel est, dans ma BdD qui contient des données géoréférencées, le point le plus proche (ou le plus éloigné) de "pieton2".
Tu m'as demandé à quoi pourrait servir cette requête.
Elle servira à interroger une BdD où seront stockées toutes les cartes géographiques disponibles au format papier dans notre cartothèque.
Elle permettra aux utilisateurs d'effectuer une recherche du type : quelle est la carte disponible en cartothèque dont les coordonnées sont proches de telle commune ou de telle autre carte, par exemple.
MERCI pour ta réponse.
J'ai corrigé ma requête selon ta proposition et cela fonctionne. J'obtiens bien le résultat que je recherchais. C'est-à-dire quel est, dans ma BdD qui contient des données géoréférencées, le point le plus proche (ou le plus éloigné) de "pieton2".
Tu m'as demandé à quoi pourrait servir cette requête.
Elle servira à interroger une BdD où seront stockées toutes les cartes géographiques disponibles au format papier dans notre cartothèque.
Elle permettra aux utilisateurs d'effectuer une recherche du type : quelle est la carte disponible en cartothèque dont les coordonnées sont proches de telle commune ou de telle autre carte, par exemple.
Bonjour, j'ai fai un formulaire, j'utilise mysqsl comme base de donne, lorsque j'ai fini de rentrer tout les information dans le formulaire, les information saisie ne rentre pas dans la base de donnée il marque "erreur avec la requete d'ajout)
le probléme de se trouver sur se code de langage ou sur ma base de donnée mais je ne trouve pas...
<html>
<head>
<body background="images/fond.jpg">
<i><h1><font color="black" face="book antiqua" size="4">
<div align="center">
<?
include ("connex.php");
$pseudo=$_GET['pseudo'];
$motpass=$_GET['motpass'];
$civilité=$_GET['civilité'];
$nom=$_GET['nom'];
$prenom=$_GET['prenom'];
$fonction=$_GET['fonction'];
$pays=$_GET['pays'];
$adresse=$_GET['adresse'];
$ville=$_GET['ville'];
$cp=$_GET['cp'];
$tel=$_GET['tel'];
$port=$_GET['port'];
$email=$_GET['email'];
$sql = "INSERT INTO adherant values (
'',
'$pseudo',
'$motpass',
'$nom',
'$prenom',
'$fonction',
'$pays',
'$adresse',
'$ville',
'$cp',
'$tel',
'$port',
'$email')";
echo "$sql";
$resultat = mysql_query($sql) or die ("Erreur avec la requête d'ajout");
echo "Vous avez bien été ajouté à la base de données";
?>
<br><br><br>
<a href="ajout.htm" style="color:#000080">Retour</a>
</h1></i>
</div>
</body>
</head>
</html>
le probléme de se trouver sur se code de langage ou sur ma base de donnée mais je ne trouve pas...
<html>
<head>
<body background="images/fond.jpg">
<i><h1><font color="black" face="book antiqua" size="4">
<div align="center">
<?
include ("connex.php");
$pseudo=$_GET['pseudo'];
$motpass=$_GET['motpass'];
$civilité=$_GET['civilité'];
$nom=$_GET['nom'];
$prenom=$_GET['prenom'];
$fonction=$_GET['fonction'];
$pays=$_GET['pays'];
$adresse=$_GET['adresse'];
$ville=$_GET['ville'];
$cp=$_GET['cp'];
$tel=$_GET['tel'];
$port=$_GET['port'];
$email=$_GET['email'];
$sql = "INSERT INTO adherant values (
'',
'$pseudo',
'$motpass',
'$nom',
'$prenom',
'$fonction',
'$pays',
'$adresse',
'$ville',
'$cp',
'$tel',
'$port',
'$email')";
echo "$sql";
$resultat = mysql_query($sql) or die ("Erreur avec la requête d'ajout");
echo "Vous avez bien été ajouté à la base de données";
?>
<br><br><br>
<a href="ajout.htm" style="color:#000080">Retour</a>
</h1></i>
</div>
</body>
</head>
</html>
Salut
Transformes tas requête en une requête du type :
INSERT INTO adherant (attribut1, attribut2,..., attribut n) VALUES('','$pseudo', etc..)
Vu que tu fais un auto-incrément je suis pas sûre qu'il sache où faire ton auto-incrément dans ta table. Du coup il se perd et rien n'est enregistré.
Essaies et dis moi ce qu'il en est
@+
Transformes tas requête en une requête du type :
INSERT INTO adherant (attribut1, attribut2,..., attribut n) VALUES('','$pseudo', etc..)
Vu que tu fais un auto-incrément je suis pas sûre qu'il sache où faire ton auto-incrément dans ta table. Du coup il se perd et rien n'est enregistré.
Essaies et dis moi ce qu'il en est
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Non il le faut le '', c'est justement avec ca qu'il reconnait que c'est un auto-increment
J'ai fait un moteur de recherche sur une base de données pour mes études et on l'avait fait comme ca, sauf qu'en plus on avait spécifié les attributs de la table.
Il faut qu'il test... mais c'est certain que le '' il le faut ;)
J'ai fait un moteur de recherche sur une base de données pour mes études et on l'avait fait comme ca, sauf qu'en plus on avait spécifié les attributs de la table.
Il faut qu'il test... mais c'est certain que le '' il le faut ;)