Rechercher : dans
Par :

[PSQL] : pb avec requete imbriquee

Dernière réponse le 29 mai 2008 à 22:11:08 lamia2, le 12 aoû 2005 à 16:33:05 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [PSQL] : pb avec requete imbriquee » dans :
Google Hacks - Automatiser les requêtes complexes VoirGoogle Hacks est un logiciel open source totalement gratuit qui permet de générer automatiquement des requêtes complexes pour rechercher de la musique, des livres, des programmes, des polices, des vidéos, etc. Google Hacks est une véritable...
Oracle - Optimisation des requêtes VoirOracle est fourni avec un optimiseur qui permet d'optimiser le plan d'exécution d'une requête. Parfois, les caractéristiques des données dans la base de données sont en évolution rapide, afin que l'optimiseur (ses statistiques) soit mis à jour....
SQL - Sous-requêtes VoirExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en...
Exécution de requêtes avec JDBC VoirExécution d'une requête SQL Pour exécuter une requête SQL, il s'agit dans un premier temps de créer un objet Statement, pouvant être obtenu à partir de l'objet Connection. Un objet ResultSet permettra de récupérer les données en provenance de...

1

Kristoff, le 13 aoû 2005 à 00:47:47

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.

Répondre à Kristoff

2

lamia2, le 16 aoû 2005 à 11:48:28

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.

Répondre à lamia2

3

vince75, le 16 aoû 2005 à 17:13:36
  • +1

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 ?

Répondre à vince75

4

lamia2, le 17 aoû 2005 à 14:10:01

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.

Répondre à lamia2

5

mec perdu, le 21 mai 2008 à 14:38:04

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>

Répondre à mec perdu

6

Fille64, le 22 mai 2008 à 15:48:16

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

@+

Répondre à Fille64

7

sanfred, le 22 mai 2008 à 18:13:48

Faut enlever le premier '' si c'est dans un champ auto-increment que tu veux insérer...

Répondre à sanfred

8

Fille64, le 22 mai 2008 à 19:03:18

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

Répondre à Fille64

9

mec perdu, le 27 mai 2008 à 11:21:55

OK jvai essayé vos methode

Répondre à mec perdu

10

mec perdu, le 29 mai 2008 à 21:52:30

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

Répondre à mec perdu

11

 Fille64, le 29 mai 2008 à 22:11:08

Lol c souvent les fautes les plus bêtes qu'on voit pas ^^

Répondre à Fille64