[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pmb.user] Re: Requête d'inventaire - prêts en cours
Bonjour,
Je trouve aussi cette procédure de liste des prêts en cours fort
intéressante.
Merci à Eric de l'avoir mise au point et merci à Hervé de nous l'avoir
transmise !
Surtout que je suis maintenant capable d'importer des groupes de lecteurs.
C'est une très bonne idée d'avoir prévu la possibilité de créer des
groupes-classes et dans la foulée, d'avoir mis au point "import_bretagne"
qui crée les groupes-classes lors de l'import.
On sent vraiment que PMB a été développé de concert avec les utilisateurs,
en fonction de leurs besoins spécifiques,
qu'il sagisse d'une bibiothèque muncipale qui va envoyer des lettres ou des
e-mails de rappel aux lecteurs
ou d'une école qui a besoin de listes triées par classe afin de pouvoir
organiser la "relance" des prêts en retard.
Je me suis permis d'ajouter une ou deux petites choses à cette procédure
Il s'agit en fait de données supplémentaires dont je demande l'affichage
- le n° de code-barres du livre (cela me semble utile)
- la date de retour (il n'y avait que la date de prêt - ce qui ne permet
pas de repérer tout de suite les prêts en retard)
J'ai aussi complété la liste des critères de tri
- j'ai ajouté un tri sur le prénom de l'élève et les n° de code-barres
Je vous livre ici deux versions : une pour EasyPHP 1.8 - une pour
Easy PHP 1.7
Bonne journée à tous,
Amicalement,
Anne-Marie Cubat
Ecole N.-D. de la Sagesse
Avenue Van Overbeke, 10
B-1083 Bruxelles
Belgique
Version EasyPHP 1.8
Liste des prêts en cours - pour un ou plusieurs groupes
SELECT libelle_groupe as 'Groupe', concat(empr_nom,' ',empr_prenom) as
Emprunteur, expl_cb as 'Code-barres', tit1 as Titre,
GROUP_CONCAT(REPEAT(CONCAT(a.author_name, ', ', a.author_rejete),
1/(r.responsability_type=0)) SEPARATOR ', ')as Auteur,
date_format(pret_date , '%d/%m/%Y') as 'Date de prêt',
date_format(pret_retour , '%d/%m/%Y') as 'Date de retour' FROM
((((((exemplaires INNER JOIN notices ON expl_notice = notice_id) INNER JOIN
pret ON expl_id = pret_idexpl) INNER JOIN empr ON pret_idempr = id_empr)
LEFT JOIN empr_groupe ON id_empr = empr_id) LEFT JOIN groupe ON groupe_id =
id_groupe) LEFT JOIN responsability r ON notice_id = responsability_notice)
LEFT JOIN authors a ON responsability_author = author_id AND (id_groupe in
(!!groupe!!)) GROUP by expl_cb ORDER BY libelle_groupe, empr_nom,
empr_prenom, expl_cb
Titre du paramètre : Groupe(s)
Liste de choix à partir d'une requête - cocher obligatoire
Options : select id_groupe, libelle_groupe from groupe order by 2
Cocher liste multiple
N.B. Ne pas oublier de cocher liste multiple dans l'écran "options"
Cela permet de sélectionner une ou plusieurs classes dans la liste - voire
toutes les classes si on le souhaite..
Par le système habituel de Windows
- MAJ + cliquer pour sélectionner des classes consécutives dans la liste
- CTRL + cliquer pour sélectionner des classes non consécutives
Version EasyPHP 1.7
Liste des prêts en cours - pour un ou plusieurs groupes
SELECT libelle_groupe as 'Groupe', concat(empr_nom,' ',empr_prenom) as
Emprunteur, expl_cb as 'Code-barres', tit1 as Titre, concat(author_name, ',
', author_rejete) as Auteur, date_format(pret_date , '%d/%m/%Y') as 'Date de
prêt', date_format(pret_retour , '%d/%m/%Y') as 'Date de retour' FROM
((((((exemplaires INNER JOIN notices ON expl_notice = notice_id) INNER JOIN
pret ON expl_id = pret_idexpl) INNER JOIN empr ON pret_idempr = id_empr)
LEFT JOIN empr_groupe ON id_empr = empr_id) LEFT JOIN groupe ON groupe_id =
id_groupe) LEFT JOIN responsability r ON notice_id = responsability_notice)
LEFT JOIN authors ON responsability_author = author_id WHERE
(responsability_type is null or responsability_type=0) AND (id_groupe
in (!!groupe!!)) GROUP by expl_cb ORDER BY libelle_groupe, empr_nom,
empr_prenom, expl_cb
Titre du paramètre : Groupe(s)
Liste de choix à partir d'une requête - cocher obligatoire
Options : select id_groupe, libelle_groupe from groupe order by 2
Cocher liste multiple
----- Original Message -----
From: "Fred Quay" <frederic.quay@ac-aix-marseille.fr>
To: <pmb.user@pizz.net>
Sent: Sunday, April 09, 2006 10:23 AM
Subject: [pmb.user] Re: Requête d'inventaire
Bonjour,
J'ai adopté cette procédure effectivement indispensable aux écoles pour
permettre aux enseignants de gérer les emprunts de leur classe.
Elle fonctionne très bien. Merci.
Cordialement
Fred Quay
Hervé BATARDIERE a écrit :
>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
>
>
>
>
>
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