Bonjour,
Je sais, dans une requête, rechercher dans le champ d'une table une chaîne de caractère définie à l' invocation de la requête : LIKE : Recherche et la chaîne de caractères est donnée en paramètre (avec des % ou pas) , mais peut-on faire cette recherche sur le contenu de plusieurs champs ? Ou dit autrement, je recherche une chaine de caractère qui apparaitrait dans n'importe quel champ de ma table.
A priori je pense que ce n'est pas possible mais ...
Merci
Bonjour
fricard Claude wrote
Je sais, dans une requête, rechercher dans le champ d'une table une
chaîne de caractère définie à l' invocation de la requête : LIKE :
Recherche et la chaîne de caractères est donnée en paramètre (avec des %
ou pas) , mais peut-on faire cette recherche sur le contenu de plusieurs
champs ? Ou dit autrement, je recherche une chaine de caractère qui
apparaitrait dans n'importe quel champ de ma table.
A priori je pense que ce n'est pas possible mais ...
Puisqu'il y a interaction avec l'utilisateur (saisie du paramètre)
je serais tenté de répondre, oui, c'est possible... sans rien créer.
Il suffit d'utiliser l'outil de requête ad hoc présenté dans cette FAQ
https://wiki.documentfoundation.org/FR/FAQ/Base/130
Si on a vraiment besoin d'une requête on peut toujours
"bricoler" en créant un champ concaténé à partir des
champs "initiaux" et rechercher sur ce champ.
Il me semble par ailleurs important de signaler que ce type de
demande révèle souvent (et bien sûr je ne dis pas que c'est le cas
ici) un défaut de conception d'une base, imposant de rechercher
dans plusieurs champs là où un bon modèle relationnel permet
de ne chercher que dans un seul.
Exemples type (on a prévu plusieurs champs au lieu d'une
table): nom d'un enfant, articles commandés, fournisseurs,
mots-clés, nom d'auteurs, etc.
Cordialement
Pierre-Yves
cela va déjà dépendre du moteur de base de donnée : intégrée hsql, externe mysql ou autre ?
Gérard
Bonjour ,
Merci pour cette indication de possibilité via cette FAQ/Base/130. J'en suis d'accord la personne qui me pose la question n'a pas peut-être pas tout à fait le rôle d'une BDD. J'essaye de rendre le service en lui proposant ta solution Pierre-Yves.
A l'occasion et pour ma culture perso, pourras-tu me rappeler comment faire la concaténation de plusieurs champs pour effectuer ensuite une recherche sur ce champ "bricolé"
Bien merci
Claude
Bonjour ,
Merci pour cette indication de possibilité via cette FAQ/Base/130. J'en suis d'accord la personne qui me pose la question n'a pas peut-être pas tout à fait le rôle d'une BDD. J'essaye de rendre le service en lui proposant ta solution Pierre-Yves.
A l'occasion et pour ma culture perso, pourras-tu me rappeler comment faire la concaténation de plusieurs champs pour effectuer ensuite une recherche sur ce champ "bricolé"
Bonjour,
Comme tu as toujours fait :
"champ1" || ' ' || "champ2" || ' ' || "champ3"
J.M
Jean-Michel, Pierre-yves et autres...
J'ai trouvé un exemple de concaténation en allant "a la pêche" (voir lien ci-après), ceci étant est-ce que l'on peut mettre en critère la commande LIKE :Recherche sur un résultat de concaténation qui est un "alias"
http://cjoint.com/?CEvlxtAphs6
La question qui m'a été posée me permet de mieux comprendre grâce à vos réponses l'utilité de la fonction concaténation. je vais tout de même indiquer à mon interlocuteur que sa demande est un peu "spéciale" et qu'il y a un défaut de définition du besoin à la "base...."
Merci
Claude
Bonjour
fricard Claude wrote
est-ce que l'on peut mettre en critère la
commande LIKE :Recherche sur un résultat de concaténation qui est un
"alias"
Rien de spécial par rapport à ce qui est expliqué ici:
https://wiki.documentfoundation.org/FR/FAQ/Base/115
Donc je ne suis pas sûr de comprendre ta question (je suppose que tu as
essayé...) ?
Cela dit, j'ai ajouté le like dans ta requête:
CEvlxtAphs6_base_avec_concatenation_de_champs.odb
<http://nabble.documentfoundation.org/file/n4057130/CEvlxtAphs6_base_avec_concatenation_de_champs.odb>
Cordialement
Pierre-Yves
Merci Pierre-Yves pour ces indications. Je ferais cependant les constats suivants:
* Je ne peux pas éditer la requête dans laquelle tu as introduit le
critère :Recherche autrement qu'en SQL. Il m'est indiqué que la
requête étant basée sur une commande SQL celle-ci ne peut être
analysée. Par contre les requêtes sans critère s'ouvre dans le mode
simple (Editer ....).
* Il semblerait que la casse soit prise en compte dans ce contexte
d'un Alias résultant d'une concaténation, alors qu'elle ne l'est
lorsque l'on fait une recherche sur un champ d'une table.
Je vais proposer cette approche à mon interlocuteur.
Merci
Claude
Jean-Michel, Pierre-yves et autres...
J'ai trouvé un exemple de concaténation en allant "a la pêche" (voir lien ci-après), ceci étant est-ce que l'on peut mettre en critère la commande LIKE :Recherche sur un résultat de concaténation qui est un "alias"
En application de la FAQ ici : https://wiki.documentfoundation.org/FR/FAQ/Base/132
Tu peux tester ce code SQL dans la base exemple :
SELECT "ID_Personne", "Nom", "Prénom", "Nom" || ', ' || "Prénom" AS "Nom complet concaténé, apparait vide si un champ est vide" FROM "Personnes" AS "Personnes" WHERE "Nom" || ', ' || "Prénom" LIKE '%OU%'
J.M
* Il semblerait que la casse soit prise en compte dans ce contexte
d'un Alias résultant d'une concaténation, alors qu'elle ne l'est
lorsque l'on fait une recherche sur un champ d'une table.
oui, c'est casse dépendant.
Il faudrait tester en modifiant la qualité des champs dans la Table Personnes : les passer de TEXTE [VARCHAR] à TEXTE [VARCHAR_IGNORECASE]
pour voir si tu ensuite entrer le critère en minuscules ou majuscules dans la requête.
Suite...
fricard Claude wrote
* Je ne peux pas éditer la requête dans laquelle tu as introduit le
critère :Recherche autrement qu'en SQL. Il m'est indiqué que la
requête étant basée sur une commande SQL celle-ci ne peut être
analysée. Par contre les requêtes sans critère s'ouvre dans le mode
simple (Editer ....).
Exact
fricard Claude wrote
* Il semblerait que la casse soit prise en compte dans ce contexte
d'un Alias résultant d'une concaténation, alors qu'elle ne l'est
lorsque l'on fait une recherche sur un champ d'une table.
Pas trop d'accord : si le champ de la table est en simple VARCHAR
les requêtes respectent la casse. Il faut avoir utilisé le type
IGNORE_CASE pour qu'elles ne le fassent pas.
Cela dit, je m'aperçois répondre peut-être "à côté" depuis le
départ, faute de savoir exactement quelle est la demande.
Peut-être qu'une simple requête avec des OU suffit (peut-être
pas nécessaire de faire un champ concaténé).
Dans l'exemple suivant les champs de la table ont été
convertis en IGNORE_CASE. La requête utilise le même
paramètre (qui ne sera demandé qu'une fois).
L'utilisateur recherche "o" dans le champ Nom et le champ
Prénom.
Il suffit que le o (minuscule ou majuscule) figure dans un
nom ou un prénom pour que l'enregistrement soit
sélectionné.
<http://nabble.documentfoundation.org/file/n4057165/ReqOu.png>
Cordialement
Pierre-Yves
Effectivement d'après ce que je comprends de la demande, la solution que tu proposes Pierre-Yves avec des "OU" pour prendre en compte l'occurrence d'une chaîne de caractères dans des champs différents, me paraît pertinente. C'est cette solution que je vais proposer à mon interlocuteur.
J'aurai appris, à titre personnel, à manipuler les concaténations.
A bientôt et encore merci à tous
Claude