[PSQL] : pb avec requete imbriquee

Résolu/Fermé
lamia2 Messages postés 8 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 17 août 2005 - 12 août 2005 à 16:33
 Fille64 - 29 mai 2008 à 22:11
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);

9 réponses

vince75 Messages postés 5 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 16 août 2005 5
16 août 2005 à 17:13
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 ?
4
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.
0
lamia2 Messages postés 8 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 17 août 2005
16 août 2005 à 11:48
Bonjour Kristoff

Oui, je débute en SQL... mais j'ai tout de même quelques rudiments.

Cette requête fait partie des exemples donnés dans un tutorial PostgreSQL & PostGIS de Jean David TECHER. Elle permet de selectionner l'objet le plus proche géographiquement d'un autre.
0
lamia2 Messages postés 8 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 17 août 2005
17 août 2005 à 14:10
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.
0
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>
0
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

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sanfred Messages postés 20 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 12 janvier 2009
22 mai 2008 à 18:13
faut enlever le premier '' si c'est dans un champ auto-increment que tu veux insérer...
0
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 ;)
0
OK jvai essayé vos methode
0
si ma requette fonctionne pas c'est que j'ai oublier de mettre civilité ds insert into adherant personne a vu cet erreur lol
merci quand méme
0
lol c souvent les fautes les plus bêtes qu'on voit pas ^^
0