[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pmb.user] Re: Requête d'inventaire
Merci Anne Marie pour ce complément d'informations.
J'en profite pour signaler que j'ai ajouté sur le Wiki :
Une procédure pour éditer la liste des prêts en cours pour un groupe
(intéressant pour les écoles fonctionnant
avec des groupes par classe) Merci à Éric qui est l'auteur de cette
requête avec des ((( et des LEFT JOIN et INNER JOIN à n'en plus finir !
;-) J'espère qu'il ne m'en voudra pas d'avoir mis ça sur le Wiki :-[
Une procédure pour compter les exemplaires par propriétaire , par code
statistique et par statut
Utilile pour les stats BDP
Hervé BATARDIERE
Anne-Marie Cubat-Vandeputte a écrit :
>Bonsoir,
>
>Je suis ravie d'apprendre que vous avez pu adapter la requête.
>
>De fait, il faut avoir EasyPHP 1.8 pour pouvoir employer la fonction
>GROUP_CONCAT.
>
>Le fait d'avoir supprimé ces deux éléments (GROUP_CONCAT(REPEAT et
>1/(r.responsability_type=0)) SEPARATOR ', ') ne va pas gêner
>fondamentalement le fonctionnement de la requête.
>
>Dans un premier temps, j'avais aussi mis tout simplement
>concat(author_name, ' ',author_rejete)
>
>
>Le problème se posait s'il y avait plusieurs auteurs secondaires. Dans
>certains cas, c'était le nom du premier auteur secondaire qui figurait
> Je réalise que ma phrase devient nébuleuse ! (le premier auteur
>secondaire ??)
>En fait, je veux dire le premier auteur secondaire encodé.
>
>Je reprends mon exemple : il n'y a pas d'auteur principal, mais 3 auteurs
>secondaires, appelés A, B et C.
>Dans certaines de mes requêtes, c'était le nom de A qui figurait, et dans
>d'autres, c'était celui de C.
>B semblait toujours disparaître aux oubliettes.
>Ce qui créait l'impression d'avoir le même livre (même n° de code-barres,
>même titre, même éditeur, etc), mais 2 auteurs différents - une fois l'un,
>une fois l'autre.
>
>J'ai donc voulu supprimer cette bizarrerie et demandé sur la liste s'il n'y
>avait pas une possibilité d'afficher le nom de l'auteur uniquement s'il
>s'agissait d'un auteur principal, et de ne jamais afficher le nom des
>auteurs secondaires.
>C'est Vincent Mayoux qui a fourni la solution - les éléments de code que
>vous avez effacés servaient donc à cela.
>
>Donc, le pire qui puisse arriver, c'est de voir 2 noms d'auteurs différents
>pour le même livre lors de l'exécution de deux requêtes différentes.
> (je veux dire que je pouvais voir le nom de A apparaître dans une
>procédure d'étiquettes, et celui de C dans une liste, par exemple - et
>pourtant, j'avais l'impression que le code sql était presque le même)
>
>Je n'ai pas compris pourquoi on mémorisait parfois le nom de A, et parfois
>celui de C.
>Il faut dire que Vincent a fourni assez vite une solution, donc je n'ai plus
>cherché !
>
>De toute façon, le livre ne figurera qu'une seule fois sur votre inventaire
>(même s'il y a plusieurs auteurs).
>En effet, l'instruction "group by expl_cb" regroupe les éléments qui ont le
>même numéro de code-barres, autrement dit, cela permet d'éviter les
>doublons.
>
>
>En outre, vous passerez peut-être sous peu à EsayPHP 1.8, et le problème ne
>se posera plus ...
>Vous pourrez employer GROUP_CONCAT(REPEAT et
>1/(r.responsability_type=0)) SEPARATOR ', ')
>
>
>Quant aux modications suggérées, aucun problème, on peut mettre "AS Code
>barres" et compléter le champ "Choix vide / Libellé" ( je l'avais complété
>chez moi, mais je n'ai pas pensé à le signaler dans mes explications).
>
>Circonstance atténuante : j'ai déjà écrit beaucoup - mon clavier se plaint
>d'ailleurs à certains moments ;-) ;-)
>
>
>Cordialement,
>
>Anne-Marie Cubat
>
>
>----- Original Message -----
>From: "Hervé BATARDIERE" <herve.batardiere@free.fr>
>To: <pmb.user@pizz.net>
>Sent: Thursday, April 06, 2006 11:14 PM
>Subject: [pmb.user] Re: Requête d'inventaire
>
>
>Bonjour Anne-Marie,
>
>Merci beaucoup pour votre rapidité et pour les résultats obtenus avec la
>requête d'inventaire.
>Toutefois, je me permets de relater mes déboires :'( qui d'après votre
>autre message sur la ml semblent provenir de la version d'easyphp. Je
>suis en version 1.7 avec php 4.3.3 et mysql 4.0.15
>
>J'ai eu un premier blocage avec
>
>GROUP_CONCAT(REPEAT(CONCAT(a.author_name, ', ', a.author_rejete)
>Je l'ai remplacé par
>concat(author_name,' ',author_rejete)
>J'ai eu un deuxième blocage avec
>1/(r.responsability_type=0)) SEPARATOR ', ')
>Je l'ai supprimé. Mais ça devait servir à quelque chose ?
>
>Ce qui donne :
>
>select section_libelle as Section, expl_cote as Cote,
>concat(author_name, ' ',author_rejete) as Auteur, tit1 as Titre, expl_cb as
>'Code barres'
>from authors a, exemplaires e, notices n, lenders l, docs_section,
>responsability r where expl_owner =!!proprietaire!! and
>expl_notice=notice_id
>and expl_owner=idlender and expl_section=idsection and responsability_notice
>= notice_id
>and responsability_author = author_id group by expl_cb order by expl_cote,
>expl_section, expl_cb
>
>Et ça marche :-)
>
>Je suggère humblement deux petites modif :
>
>1°) expl_cb as 'Code barres' au lieu de expl_cb as Codes_barres
>pour éviter le underscore dans l'état de sortie
>
>2°) Dans les options du paramètre Propriétaire,
>dans le champ "Choix vide/Libellé" saisir "Choisir un propriétaire"
>de sorte qu'à l'exécution de la requête, ce libellé apparaisse
>en premier dans la liste des propriétaires
>
>Hervé BATARDIERE
>
>
>Anne-Marie Cubat-Vandeputte a écrit :
>
>
>
>>Bonjour,
>>
>>Voici la requête demandée - on sélectionne à chaque fois un seul
>>propriétaire
>>La procédure affiche le nom de l'auteur uniquement s'il s'agit d"un auteur
>>principal.
>>Le nom des auteurs secondaires n'est pas mentionné. (sinon, on pourrait
>>avoir plusisurs fois le même exemplaire, avec à chaque fois le nom d'un des
>>auteurs secondaires).
>>
>>
>>Version sans n° de code-barres
>>
>>select section_libelle as Section, expl_cote as Cote,
>>GROUP_CONCAT(REPEAT(CONCAT(a.author_name, ', ', a.author_rejete),
>>1/(r.responsability_type=0)) SEPARATOR ', ') as Auteurs, tit1 as Titre
>>from
>>authors a, exemplaires e, notices n, lenders l, docs_section,
>>responsability
>>r where expl_owner = !!proprietaire!! and expl_notice=notice_id and
>>expl_owner=idlender and expl_section=idsection and responsability_notice =
>>notice_id AND responsability_author = author_id group by expl_cb order by
>>expl_cote, expl_section, expl_cb
>>
>>Titre du paramètre : propriétaire / ou prêteur (comme vous voulez)
>>Liste de choix à partir d'un requête
>>Options : select idlender, lender_libelle from lenders order by
>>lender_libelle (NE PAS cocher case multiple)
>> voir explications ci-dessous
>>
>>
>>Version avec n° de code-barres
>>
>>select section_libelle as Section, expl_cote as Cote,
>>GROUP_CONCAT(REPEAT(CONCAT(a.author_name, ', ', a.author_rejete),
>>1/(r.responsability_type=0)) SEPARATOR ', ') as Auteurs, tit1 as Titre,
>>expl_cb as Code_barres from authors a, exemplaires e, notices n, lenders l,
>>docs_section, responsability r where expl_owner =!!proprietaire!! and
>>expl_notice=notice_id and expl_owner=idlender and expl_section=idsection
>>and
>>responsability_notice = notice_id AND responsability_author = author_id
>>group by expl_cb order by expl_cote, expl_section, expl_cb
>>
>>
>>
>>**IMPORTANT : Remarque de syntaxe**
>>
>>Il y a une différence cruciale entre
>> d'une part where expl_owner = !!proprietaire!! ou
>>where idsection = !!section!! ou where expl_statut = !!statut!!
>> et d'autre part where expl_owner in (!!proprietaire!!) ou
>>where
>>idsection in (!!section!!) ou where expl_statut in (!!statut!!)
>>
>>
>>Si j'écris where expl_owner in (!!proprietaire!!) - j'emploie le mot "in"
>>et les parenthèses
>> c'est que je veux laisser la possibilité de choisir un ou plusieurs
>>propriétaires
>> vous devez cocher la case "liste multiple" pour disposer vraiment de
>>ce
>>choix (au moment de l'exécution de la requête)
>>
>>Mais si j'écris where expl_owner = !!proprietaire!! - j'emploie le signe
>>égal
>> dans ce cas, je dis de NE PAS cocher "liste multiple"
>> car je veux restreindre le choix à une seule possibilité (un seul
>>statut, dans ce cas-ci)
>> même si vous cochez la case "liste multiple", cela va déclencher un
>>message d'erreur au moment de l'exécution
>>
>>N.B. Le fait d'employer la syntaxe avec in ( ) et de cocher la case "liste
>>multiple" n'oblige pas l'utilisateur à choisir - au moment de l'exécution
>>de
>>la requête -plusieurs éléments dans la liste, il peut très bien ne
>>sélectionner par exemple qu'un seul propriétaire.
>>Mais le fait d'avoir employé cette syntaxe avec "in" et d'avoir coché cette
>>case rend votre procédure plus polyvalente, puisqu'on peut demander la
>>liste
>>pour 1 ou 2 propriétaires, au choix.
>>Idem pour les ections ou statuts.
>>
>>A vous de voir ce que vous préférez employer dans votre requête.
>>
>>
>>**La syntaxe est donc fort importante**
>>
>>En résumé
>>- pour avoir la possibilité de choisir plusieurs éléments dans la liste
>> il faut employer la syntaxe avec in( ) ET cocher la case "liste
>>multiple"
>> (les 2 conditions doivent être remplies)
>>
>>- pour être sûr de restreindre le choix à une possibilité et éviter tout
>>risque de message d'erreur
>> soit il faut employer la syntaxe avec in( ) ET NE PAS cocher la case
>>"liste multiple"
>> soit il faut employer la syntaxe avec le signe = ET NE PAS cocher la
>>case
>>"liste multiple"
>>
>>- attention si vous avez employé la syntaxe avec le signe = (c'est le
>>grand "piège")
>> ne cochez surtout pas la case "liste multiple" - sinon l'utilisateur sera
>>confronté à un message d'erreur s'il essaye de choisir plusieurs éléments
>>
>>
>>**Rappel : Comment sélectionner plusieurs éléments dans la liste
>>déroulante?**
>>
>>Avec le système habituel de Windows
>> - pour sélectionner des éléments consécutifs dans une liste : on
>>maintient la touche MAJ (SHIFT) enfoncée, et on clique sur le premier et le
>>dernier élément à sélectionner.
>> - pour sélectionner des éléments non consécutifs dans une liste : on
>>maintient la touche CTRL enfoncée, et on clique sur les éléments à
>>sélectionner.
>>
>>
>>
>>Sinon, si vous voulez d'autres requêtes d'inventaire, allez voir sur le
>>Wiki, j'ai mis en ligne quelques variantes.
>>Voir requêtes sql - inventaire (3e partie)
>>
>>
>>Bonne journée,
>>
>>Anne-Marie Cubat
>>
>>Ecole N.-D. de la Sagesse
>>Avenue Van Overbeke, 10
>>B-1083 Bruxelles
>>Belgique
>>
>>----- Original Message -----
>>From: "Hervé BATARDIERE" <herve.batardiere@free.fr>
>>To: <pmb.user@pizz.net>
>>Sent: Thursday, April 06, 2006 2:24 AM
>>Subject: [pmb.user] Requête d'inventaire
>>
>>
>>Bonjour à tous,
>>
>>Je voudrais faire une requête pour éditer un inventaire des documents de
>>la bibliothèque avec les éléments suivants :
>>
>>Section Cote Titre Auteur nom + prénom pour un Prêteur dans une
>>liste de choix
>>
>>Voici le début de la requête, mais je coince sur le nom de l'auteur
>>
>>select expl_section as Section, expl_cote as Cote, tit1 as Titre from
>>exemplaires, notices, docs_statut, lenders where
>>expl_owner=!!proprietaire!! and expl_notice=notice_id and
>>expl_statut=idstatut and expl_owner=idlender and expl_section=idsection
>>order by expl_cote, expl_section
>>
>>Que faut-il rajouter ?
>>
>>Merci de votre aide
>>
>>Hervé batardiere
>>
>>
>>Liste de diffusion pmb.user
>>Pour se désinscrire : mailto:pmb.user_request@sigb.net?subject=unsubscribe
>>
>>
>>
>>
>>Liste de diffusion pmb.user
>>Pour se désinscrire : mailto:pmb.user_request@sigb.net?subject=unsubscribe
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>Liste de diffusion pmb.user
>Pour se désinscrire : mailto:pmb.user_request@sigb.net?subject=unsubscribe
>
>
>
>
>Liste de diffusion pmb.user
>Pour se désinscrire : mailto:pmb.user_request@sigb.net?subject=unsubscribe
>
>
>
>
>
>
>
Liste de diffusion pmb.user
Pour se désinscrire : mailto:pmb.user_request@sigb.net?subject=unsubscribe