|
WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
Bonjour à tous,
Je travaille en Webdev 12 avec une base hyperfile
Partie de la base concernée : J'ai une table document reliée à un table collection, un document peut avoir 0 ou 1 collection et une collection peut avoir 0 ou n document.
Mon problème est le suivant : Si je fais une requête (editeur ou SQL) demandant d'afficher tous les documents dont le titre contient la variable cTitre OU la collection contient la var. cCollection, le résultat contient uniquement les documents qui ont une collection renseignée, il ne me donne pas les documents qui ont uniquement le titre correspondant mais sans collection.
Note : J'ai bien trouvé dans la description des jointures, quelque chose me permettant d'afficher un document qui n'a pas de collection mais si je coche cette option, je me retrouve, lors de l'exec. de ma requète, avec tous les documents de la base (sans exception) !
Question ? Est ce un problème ou un manque dans Webdev ou ai-je oublié quelque chose ?
Solution batarde : J'ai bien une solution mais qui ne me convient pas du tout, à savoir, que si je créé une collection avec pour libellé un espace (rien) et que j'attribue le numéro de collection correspondant à tous les documents qui n'ont pas de collection cela fonctionne mais ce n'est pas très pro et surtout difficilement gérable.
Merci pour votre aide .
Contribution le : 05/08/2008 16:25
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 25/08/2006 13:13
Post(s): 27
|
Salut !
Copie ici le code SQL de ta requete, ca sera plus simple pour la corriger ! :)
Contribution le : 07/08/2008 08:55
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
Merci de votre participation, voici les deux requetes que j'ai tenté et qui ne répondent pas à ma demande :
1) Celle ci renvoi uniquement les enregistrements (doc) qui ont une collection :
SELECT Doc.Nodoc AS Nodoc, Doc.titre AS titre, Doc.sstitre AS sstitre, Collec.Collection AS Collection FROM Collec, Doc WHERE Doc.nocolle = Collec.IDCollec AND ( Collec.Collection LIKE %{cColl}% OR Doc.titre LIKE %{cTitre}% )
2) Cette autre renvoi tous les enregistrements ... :
SELECT Doc.Nodoc AS Nodoc, Doc.titre AS titre, Doc.sstitre AS sstitre, Collec.Collection AS Collection FROM Collec RIGHT OUTER JOIN Doc ON Doc.nocolle = Collec.IDCollec WHERE ( Collec.Collection LIKE %{cColl}% OR Doc.titre LIKE %{cTitre}% )
Merci de m'apporter une réponse sachant que je voudrais ,dans cet exemple, tous les docs dont le "titre" contient "cTitre" OU la "collection"contient "cColl" y comprix les enr. qui n'ont pas de collection, le titre étant obligatoire !
Ci joint le schéma de ma requ^te en Webdev 12
Attacher un fichier: REQ_Doc.JPG (29.58 KB)
Contribution le : 07/08/2008 09:12
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 18/07/2008 08:53
Post(s): 14
|
Moi je dirai la proposition 1) avec une petite modif : SELECT Doc.Nodoc AS Nodoc, Doc.titre AS titre, Doc.sstitre AS sstitre, Collec.Collection AS Collection FROM Collec, Doc WHERE Doc.nocolle = Collec.IDCollec AND
Collec.Collection LIKE %{cColl}% AND Doc.titre LIKE %{cTitre}%
Pour la solution 2) : SELECT Doc.Nodoc AS Nodoc, Doc.titre AS titre, Doc.sstitre AS sstitre, Collec.Collection AS Collection FROM Collec INNER JOIN Doc ON Doc.nocolle = Collec.IDCollec WHERE Collec.Collection LIKE %{cColl}% AND Doc.titre LIKE %{cTitre}%
Contribution le : 07/08/2008 11:07
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
re ...
Merci pour votre participation mais vous ne répondez pas à mon besoin premier à savoir : "tous les docs dont le 'titre' contient 'cTitre' OU la 'collection' contient 'cColl' y comprix les enr. qui n'ont pas de collection"
Dans ce que vous me mettez j'aurais tous les docs dont le titre est 'cTitre' ET la collection 'cColl' et non l'un OU l'autre comme j'ai besoin ...
Une autre soluc SVP ?
Contribution le : 07/08/2008 16:05
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 18/07/2008 08:53
Post(s): 14
|
Un truc comme ça alors : SELECT Doc.Nodoc AS Nodoc, Doc.titre AS titre, Doc.sstitre AS sstitre, Collec.Collection AS Collection FROM Collec INNER JOIN Doc ON Doc.nocolle = Collec.IDCollec WHERE ((Collec.Collection LIKE %{cColl}% AND Collec.Collection<>'') OR (Doc.titre LIKE %{cTitre}% AND Doc.titre<>'')) OR (Doc.titre LIKE %{cTitre}% AND Doc.titre <> '' AND Collec.Collection = '')
A condition d'avoir dans ta table Collec une ligne avec Collection=''
Contribution le : 07/08/2008 16:32
Edité par fucce sur 7/8/2008 17:00:13
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
D'après les premiers tests se seraient dans ce style là :
SELECT Doc.Nodoc AS Nodoc, Doc.titre AS titre, Doc.sstitre AS sstitre, Collec.Collection AS Collection FROM Collec RIGHT OUTER JOIN Doc ON Doc.nocolle = Collec.IDCollec WHERE Collec.Collection LIKE %{cColl}% AND Collec.IDColl<>0 OR Doc.titre LIKE %{cTitre}%
Cependant j'ai un autre problème quand je vais encore plus loin avec un double relation (cf. analyse).
Là ça se gate et je tourne en rond ...
Attacher un fichier: rel_complex.JPG (38.38 KB)
Contribution le : 07/08/2008 16:56
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 18/07/2008 08:53
Post(s): 14
|
J'ai modifié mon POST car je pense qu'il n'affichait pas les oeuvres sans collection. Dans ta requête, tu me confirme donc que tu à un enregistrement vide dans ta table collection!?!
Contribution le : 07/08/2008 17:06
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
Et bien non, je voudrais éviter justement de créer (volontairement) un enregistrement vide afon de créer une liaison obsolète !
Pour résumer je veux bien les documents, qu'ils aient ou pas une collection.
Pour cette partie? ce que vous m'avez donné fonctionne, ça se gate lorsqu'une relation complexe rentre en jeux (2nd problème), dans ce cas, j'ai l'impression qu'il perd le nord, je fais de nouveaux tests et refait appel si je bloque.
En tout cas merci et bon dev.
Contribution le : 08/08/2008 08:21
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
Là où les choses se gattent c'est lorsque je demande à afficher différentes informations sur les documents contenant : un titre = var. cTitre OU une collection = var. cColl OU un mot matière (=mot clé) = var. cMotClé OU un auteur = var. cNomAuteur
La difficulté principale réside dans le fait qu'un unique document peut avoir plusieurs auteurs ainsi que plusieurs mots clés (ou aucun...) : cf analyse
Le but de cette requête est de pouvoir rechercher tous les docs qui contiennent au moins l'un des variables demandées.
Si quelqu'un à un soluc car dans les INNER JOIN, LEFT OUTER ... je m'y mélange les pinceaux !
Sur un autre post on m'a parlé de la fonction coalesce() mais étant une nouvelle fonction de webdev 12 je crois l'aide en ligne n'est que très peu étofféé.
Merci ...
Attacher un fichier: ana_doc.JPG (94.42 KB)
Contribution le : 08/08/2008 08:47
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 25/08/2006 13:13
Post(s): 27
|
Déjà, pour ta premiere partie sans devoir créer de collection bidon :
sREq est une chaîne = [ SELECT DOC.NoDOC,DOC.TITRE,DOC.NoColle,COLLEC.COLLECTION FROM DOC Left OUTER JOIN COLLEC on DOC.NoColle=COLLEC.IDCOLLECTION WHERE DOC.TITRE LIKE '%1%' OR (DOC.NoColle<>0 AND COLLEC.COLLECTION LIKE '%2%') ]
sREq=ChaîneConstruit(sREq,"%"+sNomDoc,"%"+sNomColl)
Contribution le : 11/08/2008 14:15
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 25/08/2006 13:13
Post(s): 27
|
Après quelques tests effectivement les conditions de selection sont pas evidentes sur des jointures externes. - Peut-etre tester si les rubriques supportent le null avec des conditions du style "Where (collec.idcollection not is null AND collec.collection like '%coucou%') " En tous cas ca ne fonctionne pas sur du HF sans Null. - Sinon utiliser des sous-requetes : Exple renvoyant tous les docs qui ont "UnDoc" dans leur titre ou "UneCollection" dans le nom de collection (ou pas de collection) ou "UnAuteur" dans le nom d'auteur (ou pas d'auteur)
SELECT * FROM DOC WHERE ( DOC.NoDOC LIKE '%UnDoc%' OR ( NoColle IN(SELECT COLLEC.IDCOLLECTION FROM COLLEC WHERE COLLEC.COLLECTION LIKE '%UneCollection%' ) ) OR ( DOC.NoDOC IN (SELECT DISTINCT DOCUMENT_AUTEUR.NoDOC FROM DOCUMENT_AUTEUR,AUTEUR WHERE AUTEUR.ID_AUTEUR= DOCUMENT_AUTEUR.ID_AUTEUR AND AUTEUR.NOM_AUT LIKE '%UnAuteur%' ) ) )
Contribution le : 11/08/2008 16:49
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
Je ne vous réponds que maintenant car j'ai testé ce que vous m'avez donné avant de vous répondre... et je dois tout bonnement vous remercier pour votre aide qui à solutionné mon problème, j'ai donc utilisé des sous requêtes pour arriver à mes fins.
Bonne continuation.
David
Contribution le : 12/08/2008 15:04
|
|
|
Re: WB12 : Requete multifichier => Problème ! |
|
Stagiaire WDF
Inscrit: 11/01/2008 11:25
Post(s): 18
|
Pour le plaisir des yeux je vous montre le code SQL de ma requête "fonctionnelle".
Celui ci me permet d'affiche le résultat demandé selon 4 critères, le tout provenant de 9 fichiers liés dans mon analyse.
J'ai fait des tests sur une base de 1000 enregistrements env. cela m'a l'air concluant et relativement rapide, reste à tester sur 10 ou 20 000 enr.
Attacher un fichier: SQL_Sympa.JPG (85.51 KB)
Contribution le : 12/08/2008 16:16
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|