[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