Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2005, 13h08   #1
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Par défaut [Sybase] Recuperer la ligne d'enregistrement voulue ASA7

Bonjour,

Voilà, mon problème, via une requête je recupère par exemple 5 lignes d'enregistrements. Je souhaiterai que ma nouvelle requête (la même en fait) me retourne qu'une seule ligne à la position désirée...en fait, je cherche la fonction identique à LIMIT de PHP ....

D'après la doc, et c'est le seul élément que j'ai trouvé, je dois utiliser FETCH après avoir declarer un curseur sur ma requête...sauf que je n'y arrive pas, je me fais toujours jetter à cause de ma syntaxe ou autres.(et je ne suis même pas sûr que ça soit compatible avec SqlAnywhere 7...(ça me parait quand même bizzare que l'on ne puisse pas faire cela simplement).

Merci de votre aide.
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2005, 13h52   #2
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Les curseurs marchent sur ASA. Refilez-nous votre code pour qu'on puisse au moins vous dire où ça plante.

En versions récentes, TOP n marche aussi
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2005, 14h10   #3
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
ok, ok désolé.

Voici ma requete, mais je ne suis pas du tout sûr de la syntaxe, j'ai essayé plusieurs méthodes et au mieux par rapport à ce que j'ai trouvé.

Test pour recuperer la seconde ligne des enregistrement retournés par la requête :

Code :
1
2
3
4
5
6
7
EXEC SQL DECLARE mon_curseur CURSOR FOR
SELECT * FROM  t_jours, t_themes LEFT OUTER JOIN t_groupes_themes ON t_themes.tf_t_nom=t_groupes_themes.tf_t_nom
WHERE t_themes.tf_j_date = t_jours.tf_j_date
AND t_jours.tf_j_date='2005-07-02'
EXEC SQL OPEN mon_curseur
EXEC SQL FETCH mon_curseur
INTO :2;
Un grand merci à toi si tu peux me debloquer...(car je galère et je suis vraiment juste niveau timing..en fait, on m'a fait changer ma bdd (completement) en fonction de ce qui était prevu au départ..et il y a une pré presentation bientôt :sweat: )
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2005, 15h13   #4
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Au fait, effectivement j'ai essayé TOP(n) et FIRST, ça marche, mais ça ne va pas dans mon cas (car ne me permet pas de recuperer le la ligne voulu hormis la première...et malheureusement, je ne peux pas trier pour que la ligne voulue apparaisse en premier)
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2005, 20h51   #5
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Visiblement, la solution ne doit pas être aussi évidante qu'il n'y parait.

Bon alors, j'ai une autre optique, mais là aussi j'ai un problème, mais la cause est surement déjà définie et connue

En fait, j'ai ajouté un numero unique chronologique avec number(*), soit la requête devient : (de mémoire, je ne suis pas devant le bon PC)

Code :
1
2
SELECT *,number(*) AS numero FROM  t_jours, t_themes LEFT OUTER JOIN t_groupes_themes ON t_themes.tf_t_nom=t_groupes_themes.tf_t_nom 
WHERE t_themes.tf_j_date = t_jours.tf_j_date
J'ai bien ma colonne "numero" avec comme valeur 1 pour le 1er enregistrement, 2, pour le second, 3 pour le troisième, etc.
Donc, je me suis dit, si j'ajoute une clause , ça devrait être bon.
Hors, à ma plus grande surprise, la requête ne retourne rien.
J'ai essayé avec une table basique d'une seule colonne, j'ai bien le bon affichage mais la clause sur la valeur de numero ne renvoi rien .
J'ai casté en int mais nada aussi ...

J'ai aussi essayé une vue...et toujours pareil, le champs numero est bien présent et renseigné correctement, dumoins d'après ce que je vois, mais impossible de faire une clause dessus

Merci de votre aide car vraiment je suis
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2005, 16h07   #6
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Vraiment personne pour m'aider et me sortir d'affaire ?
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 11h05   #7
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Si vous avez une ligne avec un select sur la table, mais que vous ne l'avez plus lors de la jointure avec l'autre table, c'est que c'est votre jointure qui péclotte.

J'ai noté que vous faisiez une jointure externe (OUTER JOIN). Votre condition se porte-t-elle sur la table externe ou interne ?
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 21h51   #8
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Si si, mais jointure me renvoie bien les lignes escomptées, le problème ne doit pas être dans ma jointure.
Je voudrais simplement récuperer la ligne 'n' des enregistrements retournés, car je ne peux le faire avec une clause "WHERE".

...Mais je ne trouve pas la solution
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2005, 08h05   #9
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Donnez-nous un exemple de sql avec ce que vous obtenez et ce que vous souhaitez obtenir. Ce sera plus clair.
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2005, 14h33   #10
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Escuse moi (tu peux me tutoyer) pour mon retard dans ma réponse, mais le temps jouant contre moi, j'ai dû abandonner ma nouvelle base au profit de l'ancienne pour la semaine dernière.

Par contre, en sqlanywhere7, je ne suis pas arrivé à recuperer la ligne voulu avec une fonction SQL, mais dans l'aide du 9 sur le site WEB de sybase, une fonction le permettant est disponible (je viens de regarder et evidement je n'arrive pas à la retrouver...), mais elle n'existait pas pour la version 7.

Du coup, je suis passé par un autre moyen, j'ai créé une vue et j'ai créé une colonne v_sa_id qui regroupe les clé primaires de mes 2 tables de jointure.

Mais là encore, pb, lorsque j'affiche toutes les données de la vue, toutes les données apparaissent bien, mais j'ai un problème pour faire une clause WHERE.

Dans interactive SQL, lors de l'execution de ma vue :
Code :
SELECT * FROM "DBA"."V_SelectionAnimation"
Toutes mes données s'affichent bien, donc j'en conclue que ma jointure et vue sont bien définies.

Lorsque je fais ce select avec la clause WHERE
Code :
SELECT * FROM "DBA"."V_SelectionAnimation" WHERE v_sa_id="THEME1GROUPE1"
J'ai bien les bonnes données qui sont retourné. THEME1 fait parti de la clé primaire de la table T_THEMES et GROUPE1 de clé primaire de la table T_GROUPES_THEMES.

Par contre, lors que je fais simplement
Code :
SELECT * FROM "DBA"."V_SelectionAnimation" WHERE v_sa_id="THEMESEUl"
Aucune valeur n'est retournée, pourtant cette valeur est bien visible lorsque l'on execute la vue, mais je ne peux selectionner les valeurs en ralation avec, ne serait-ce pas du fait que je concatène avec un NULL (car aucune correspondance est dans T_GROUPES_THEMES, d'où ma jointure).

Sincerement, je comprend que tout peut paraitre flou dans mon explication, car c'est simple dans le resultat mais compliqué à expliquer, sutout que je n'arrive pas à comprendre comment d'un côté, ça sort bien avec le select, mais lorsque je fais la clause WHERE, ça ne me retourne rien (j'ai essayé avec un LIKE, dans ce cas, tous les enregistrements dans la concaténation est du genre THEMEXGROUPEX sont retourné, mais seulement THEMESEULX ne sont pas retournés...)

J'espere que tu comprends et que tu pourras m'éclairer...
Merci de ta lecture
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2005, 15h35   #11
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 87
Points : 25
Points : 25
Au fait, j'ai contourné mon pb.

Je me rappelai plus que la concaténation d'une valeur avec un NULL donnait NULL...c'est ça qui me jouait un tour dans mon dernier pb énoncé.
Du coup, si modifié mon code pour que si jamais ce paramètre est nul, je ne concatène pas.

Sinon, pour ma curiosité, toujours pas trouvé pour selectionner simplement la Xième ligne d'un resultat lors d'une requête (identique à LIMIT par exemple en PHP).
D'après la doc sur le WEB, c'est une nouveauté de la version 9, moi je tourne sous la 7, mais bon, ça me parait bizzare que cela ne soit pas possible quand même... :-/
onipif est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h50.


 
 
 
 
Partenaires

Hébergement Web