Requêtes SQL

Requêtes SQL

0. Informations générales sur les rapports SQL

0.1 Fouiller dans les rapports existants

Le module Bilans et statistiques présente une section nommée Rapport sauvegardés. Par défaut, cette section présente tous les rapports sauvegardés, mais des onglets présentent les différents groupes de rapports et, dans les groupes, on peut à nouveau trié par sous-groupe afin de bien classifier les rapports.

Le tableau peut également être trié selon plusieurs colonnes pertinentes comme le nom, la date de création, la date de dernière exécution ou encore l'auteur.


Comme les tables de la base de données peuvent changer d'une version à l'autre, la colonne Mise à jour permet également de voir si des rapports ont besoin d'être modifiés : 


Pour les messages de mise à jour concernant la table biblioitems.marcxml, vous pouvez consulter l'article à ce sujet : Changement de la table biblioitems.marcxml

0.2 Construire un nouveau rapport

Consulter la vidéo ci-dessous pour une première approche de l’outil Construire un nouveau rapport dans Bilans et statistiques.

Pour les requêtes déjà prêtes à être exécutés (code qui commence par SELECT), il faut les copier/coller dans un nouveau rapport SQL (Bilans et statistiques>Créer à partir de SQL).



0.3 Fonctions dans les rapports (à jour, 22.05)

Lorsqu'un rapport est exécuté, différentes options s'offre à vous sur la page où les résultats sont présentés 


Le bouton Nouveau rapport permet de créer un nouveau rapport à partir de la page d'un rapport exécuté. Les options sont Nouveau rapport guidé ou Nouveau rapport SQL.
Le bouton Modifier permet de modifier le code du rapport qu'on consulte avec l'option Modifier, de copier le code dans un nouveau rapport SQL avec l'option Dupliquer ou de supprimer le rapport avec l'option Supprimer.
Le bouton Exécuter le rapport permet d'exécuter à nouveau le rapport. Si des critères sont à remplir au moment de l'exécution, vous serez invité à remplir à nouveau les critères.
Le bouton Planifier permet de prévoir la prochaine exécution du rapport, dont les résultats vous seront alors transmis par courriel. Vous choisirez la date et l'heure, le format et le courriel où vous le recevrez.
Le bouton Télécharger permet d'extraire les données du rapport en différents formats, comme en CSV ou dans un tableur Excel.
Le bouton Afficher le code SQL permet de faire afficher le code du rapport au-dessus du tableau de résultats. Par défaut, le code est caché et il peut être pratique de consulter le code en même temps que les résultats pour mieux interprétés ceux-ci.
Le bouton Créer un graphique vous permet de créer des graphiques simples à partir de votre tableau de données. Vous pourrez choisir le type de graphique entre circulaire, à barres verticales ou barres horizontales, puis vous pourrez choisir quelle donnée s'affiche sur quelle axe de votre graphique.
Le bouton Créer un graphique avec toutes les données : ne fonctionne pas.
Le bouton Opérations en lot avec 20 notices visibles

0.4 Corriger un rapport obsolète

Depuis la version 17.05, le champ xml de la table bibliotitems n'existe plus. Ce champ a été remplacé par le champ metadata de la table biblio_metadata. Il se peut donc, si des rapports ont été créés avant cette version, que ceux-ci aient besoin d'une mise à jour. Si c'est le cas, ils auront la mention suivante dans la colonne Mis à jour du tableau des rapports sauvegardés :


Le bouton de mise à jour n'est pas entièrement au point. La mise à jour peut être très longue à effectuer et il se peut que Koha oublie certains champs à modifier. Il est recommandé de changer manuellement le champ, tout simplement. Avec la fonction de recherche dans la page (CTRL+F), il est possible de trouver rapidement les occurrences du champ biblioitems.xml. Celui-ci est alors remplacé par biblio_metadata.metadata.

Warning
Attention!! Le champ «marcxml» fait aussi partie de la table AUTH_HEADER. S'il est utilisé avec cette table, il est à conserver.

1.Informations initiales

1.1 Utilisation des questions à l’exécution

Koha permet de poser des questions à l’exécution et ainsi rendre les requêtes automatiquement dynamique. Le plus utile est probablement lors de l’utilisation de date qui change régulièrement.

Exemple :

Quote
select * from items where timestamp = <<Inscrire une date - AAAA-MM-JJ >>

Lors de l’exécution de ce rapport, vous devrez entrer une date pour que cette date soit inscrite dans la requête SQL.

1.2 Troncature en SQL

La troncature est possible en SQL en utilisant le caractère ‘%’ accompagné de la fonction de validation : ‘like’

Exemple :

Quote
select * from items where barcode like '0123%' -- Troncature à droite.


Quote

select * from items where barcode like '%0123' -- Troncature à gauche.

Quote
select * from items where barcode like '%0123%' -- Troncature des 2 côtés

1.3 Extraction à partir du marcXML

L’extraction des données à partir du marxml peut-être réaliser, mais demande quelques connaissances supplémentaires.

  1. marcxml est le champ complet de chacune des notices que possède votre bibliothèque.
  2. marcXml est situé dans la table : biblioitems.

Exemple simple : On veut afficher la zone 100$a de toutes les notices :


Quote

select ExtractValue(metadata,'//datafield[@tag="100"]/subfield[@code="a"]') from biblio_metadata

1.3.1 Extraction du Leader : 000

Syntaxe : ExtractValue(metadata,’//leader’)

Il faut comprendre que nous allons avoir une série de caractères complets du tag sélectionné. Ce sera à nous par la suite de faire le tri pour retrouver l’information que nous avons besoin. Il est possible de le faire avec la fonction substring de mysql.

Exemple : On veut retrouver l’encodage du leader.

Il s’agit ici du caractère 17.


Quote
substring(ExtractValue(metadata,'//leader'),17,1)

Donc à partir du 17e caractère, retourner 1 caractère.

1.4 Extraction d’un ControlField : 0XX

Syntaxe :

Quote
ExtractValue(metadata,'//controlfield[@tag="008"]')

Il faut comprendre que nous allons avoir une série de caractères complets du tag sélectionné. Ce sera à nous par la suite de faire le tri pour retrouver l’information que nous avons besoin.

Il est possible de le faire avec la fonction substring de mysql.

Ainsi, si on désire obtenir uniquement la date de publication de la zone 008.

Il s’agit des caractères : 7 à 10 inclusivement.

Il faut donc inscrire :

Quote
substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),8,4)

Donc à partir du 8e caractère retourner les 4 prochains caractères.

1.4.1 Extraction d’un datafield : 1XX – 9XX

  • Syntaxe pour extraire le contenu de la 260$a
Quote

ExtractValue(metadata,'//datafield[@tag="260"]/subfield[@code="a"]')
  • Syntaxe pour extraire le contenu de toute une zone

Quote
ExtractValue(metadata,'//datafield[@tag="260"]/*')
  • Syntaxe pour extraire une sous-zone locale
Quote

ExtractValue(items.more_subfields_xml,'//datafield[@tag="999"]/subfield[@code>="x"]')
  • Syntaxe pour faire un filtre sur une partie de texte (pour éviter de devoir inscrire les % )
    QuoteWHERE barcode LIKE CONCAT( '%', <<Code barre>>, '%')

1.5 Faire un lien dans un rapport

Depuis la version 22.05, des liens sont faits automatiquement vers les notices et les exemplaires lorsqu'un rapport contient un biblionumber ou un itemnumber et vers les dossiers des usagers lorsqu'un rapport contient le borrowernumber ou le cardnumber. Ceci dit, la fonction peut toujours être utilisée avec d'autres champs qu'on veut rendre cliquables ou si on veut renvoyer vers d'autres pages, comme la page de détails à l'OPAC.

Si vous voulez faire le lien automatique, il est cependant important de ne

Par exemple, si on veut consulter la notice d'autorité :

Quote
CONCAT('<a href="/cgi-bin/koha/authorities/detail.pl?authid=',authid,'\" target="_blank" rel="noopener">',authid,'</a>') as 'Consulter notice',

ou encore rajouter un lien cliquable vers le contenu de la zone 856 (lien vers la table biblioitems)

Quote
CONCAT('<a href=\"',url,'\">',url,'</a>') AS url,

1.6 CASE WHEN pour identifier clairement des valeurs 

Le CASE WHEN est à utiliser de la même manière qu'une colonne. Il faut donc mettre une virgule après la fonction si on nomme d'autres colonnes dans notre section SELECT. Il permet de dire "lorsque la valeur de telle champ est X, inscrit plutôt telle valeur". 

1.6.1 Mois 

Lorsque vous faites ressortir le mois d'une donnée en dates, la fonction MONTH(champKoha) est utilisé. ChampKoha indique le champ de la table qui vous intéresse. Ce pourrait être, par exemple, le champ datetime de la table statistics. Vous inscririez alors MONTH(datetime) et le résultat dans votre rapport sera que plutôt qu'inscrire la date complète (ex. 2023-05-23), il sera simplement inscrit le mois, en chiffre (donc 5 dans l'exemple). Pour la fluidité de la lecture, voir le mois en chiffre n'est peut-être pas idéal. Utiliser CASE WHEN permet donc de changer le mois en chiffre pour le nom en français : 

CASE 
WHEN MONTH(champKoha)='1' then 'Janvier' 
WHEN MONTH(champKoha)='2' then 'Février' 
WHEN MONTH(champKoha)='3' then 'Mars' 
WHEN MONTH(champKoha)='4' then 'Avril' 
WHEN MONTH(champKoha)='5' then 'Mai' 
WHEN MONTH(champKoha)='6' then 'Juin' 
WHEN MONTH(champKoha)='7' then 'Juillet' 
WHEN MONTH(champKoha)='8' then 'Août' 
WHEN MONTH(champKoha)='9' then 'Septembre' 
WHEN MONTH(champKoha)='10' then 'Octobre' 
WHEN MONTH(champKoha)='11' then 'Novembre' 
WHEN MONTH(champKoha)='12' then 'Décembre'  

end 'Mois',

Ce que vous inscrivez entre les apostrophes, après le then, est votre choix. Vous pourriez écrire les mois dans leur version abrégée, par exemple. Après le end, il est important de donner un titre, comme ici 'Mois', sinon le nom de la colonne dans le rapport sera tout le code CASE WHEN.

1.6.2 Types de frais et crédit dans les rapports de caisse 

Lorsque vous faites des rapports en lien avec vos frais et vos crédits, si vous ne faites rien de particulier, vos types de frais et crédit apparaitront selon leur code dans l'administration, ce qui n'est pas toujours parlant. Vous pouvez alors utiliser CASE WHEN pour regrouper les frais et les crédits et leur donner des noms significatifs : 

CASE WHEN credit_type_code='C' then 'Credit' WHEN credit_type_code='FOR' then 'Amnistie' WHEN credit_type_code='W' then 'Amnistie' WHEN debit_type_code='F' then 'Amende' WHEN debit_type_code='FU' then 'Amende - Longue période' WHEN debit_type_code='PAY' then 'Paiement' WHEN debit_type_code='A' then 'Frais de gestion' WHEN debit_type_code='M' then 'Divers' WHEN debit_type_code='L' then 'Item perdu' WHEN debit_type_code='N' then 'Nouvelle carte' ELSE 'VALEUR INCONNUE' end as TypeTransaction,

Les codes de crédit et de frais doivent être adaptés à ce qui se trouve dans votre instance, dans le module Administration sous Facturation dans Types de frais et Types de crédits.

1.7 Ajouter un menu déroulant

Koha offre maintenant une façon facile d'ajouter un menu déroulant dans un rapport SQL. Au-dessus de la boîte de saisie du rapport, il suffit de cliquer sur [Insérer un choix].

Il est alors possible de choisir certaines options populaires, comme les types de document ou les catégories d'utilisateurs. Autrement, l'option Valeurs autorisées permet de sélectionner n'importe quelle catégorie de valeurs autorisées existantes dans l'instance.

Une fois la sélection faite, Koha offre différentes options :

Il est possible de changer l'étiquette, c'est-à-dire le titre du menu déroulant, ainsi que le paramètre d'exécution.
  1. Paramètre unique seulement : le rapport sera filtré sur la valeur unique sélectionnée dans le menu. L'opérateur = doit être utilisé avant le code.
    1. Code : 
    2. Résultat : 
  2. Inclus les options pour tous : le menu contiendra l'option "Tous" pour filtrer sur toutes les valeurs du menu. L'opérateur LIKE doit être utilisé avant le code.
    1. Code : 
    2. Résultat : 
  3. Autoriser les sélections multiples : il sera possible de choisir plus qu'une valeur dans le menu. L'opérateur IN doit être utilisé avant le code.
    1. Code :
    2. Résultat : À noter qu'il faut utiliser la touche CTRL pour sélectionner les valeurs voulues.

2. Circulation

2.1 Solde des usagers ayant empruntés entre 2 dates.

Ce rapport permet d’avoir en main tous les usagers avec un solde plus grand que X parmi entre 2 dates spécifiques.
Colonnes affichées :
  • borrowernumber : Numéro unique de l’usager
  • cardnumber : Numéro de carte de l’usager
  • surname : Nom de famille de l’usager
  • firstname : Prénom de l’usager
  • date d’expiration : Date d’expiration de l’usager
  • Solde : Solde total de toutes les transactions entre les dates entrées.
*Remarque : Ce rapport vous demande de répondre à 3 questions :
  • À partir de : Transaction effectué par l’usager après une date précise
  • Avant le : Transaction effectué par l’usager avant une date précise
  • Solde minimal : Solde minimal que vous voulez avoir.
Info

SELECT b.borrowernumber, b.cardnumber,b.surname, b.firstname, b.dateexpiry as 'Date Expiration',format(sum(amountoutstanding),2) as 'Solde des documents'
FROM
accountlines a
JOIN borrowers b on (a.borrowernumber=b.borrowernumber)
JOIN issues i on (a.borrowernumber=i.borrowernumber and a.itemnumber= i.itemnumber)
WHERE
i.issuedate >= <<Transaction après le AAAA-MM-JJ ?>> and
i.issuedate <= <<Transaction avant le AAAA-MM-JJ ?>>
GROUP BY
b.borrowernumber, b.cardnumber,b.surname, b.firstname, b.dateexpiry
having sum(amountoutstanding) >= <<Solde > que ?>>
ORDER BY sum(amountoutstanding) DESC;


2.2 Solde des usagers ( Incluant les documents retournés )

Ce rapport permet d’avoir en main tous les usagers avec un solde X.

Colonnes affichées :

  • borrowernumber : Numéro unique de l’usager
  • Nom de famille : Nom de famille de l’usager
  • Prénom : Prénom de l’usager
  • Numéro de carte : Numéro de carte de l’usager
  • Date expiration : Date d’expiration de l’usager
  • Numéro téléphone : Numéro de téléphone de l’usager
  • Courriel : Courriel de l’usager
  • Solde courant : Solde complet courant de l’usager
  • Date dernière inscription : Date de la dernière inscription dans le dossier de l’usager.
Quote
SELECT b.borrowernumber,b.surname as 'Nom de famille', b.firstname as 'Prénom', b.cardnumber as 'Numéro de carte', b.dateexpiry as 'Date expiration',
b.phone as 'Numéro téléphone',b.email as 'Courriel',format(sum(a.amountoutstanding),2) as 'Solde courant', 
min(a.timestamp) as 'Date dernière inscription'
FROM accountlines a
JOIN borrowers b on (a.borrowernumber = b.borrowernumber)
GROUP BY b.borrowernumber,b.surname, b.firstname, b.cardnumber, b.dateexpiry,b.phone,b.email
having sum(amountoutstanding) >= <<Montant minimum : (Ex. 2.50) >>

2.3 Prêt courant pour paramétrer les notifications

Ce rapport permet d’avoir la liste des prêt en cours au moment de l’édition du rapport avec une colonne qui envoi vers le compte de l’usager pour modifier ses préférences de notifications d’envoi de courriel.

Remarque: Il y a une limite à l’affichage de 1000 résultats pour que tous les résultats s’affichent dans la première page. Il faut ajuster le nombre selon le nombre de vos résultats.

Colonnes affichées

  • issues.datedue : date de retour
  • borrowers.surname : nom de l’usager
  • borrowers.cardnumber : numéro de l’usager
Quote
SELECT max(issues.date_due) as "Date de retour", borrowers.surname as "Nom de famille",
borrowernumber
FROM issues
LEFT JOIN borrowers ON (issues.borrowernumber=borrowers.borrowernumber)
LEFT JOIN borrower_message_preferences ON (issues.borrowernumber=borrower_message_preferences.borrowernumber)
WHERE borrower_message_preferences.message_attribute_id is NULL
group by borrowers.surname, borrowers.cardnumber
ORDER BY borrowers.surname ASC
LIMIT 1000

Exemple visuel



2.4 Liste de documents jamais prêtés

Quote
SELECT biblio.biblionumber,
      items.barcode as 'Code à barres',
biblio.title as Titre,
items.itype as 'Type de document',
items.itemcallnumber as 'Cote',
biblio.biblionumber as 'Numéro notice',
items.dateaccessioned AS 'Date création exemplaire',
biblio.datecreated as 'Date création notice',
biblio.copyrightdate as 'Date publication 260$c'
FROM items
LEFT JOIN biblio USING (biblionumber)
LEFT JOIN issues USING (itemnumber)
LEFT JOIN old_issues USING (itemnumber)
WHERE issues.itemnumber IS NULL
AND old_issues.itemnumber IS NULL
order by items.itype, items.itemcallnumber

2.5 Nombre de prêts initiaux par intervalle de date

Pour ce rapport, vous pouvez vous servir du module Bilans et Statistiques > Circulation et inscrire les paramètres comme ci-dessous.


Vous aurez un résultat de ce type : (ici 5804 prêt entre le 01/07/2012 et le 30/06/2013


2.6 Nombre de renouvellements par intervalle de date

Pour ce rapport, vous pouvez vous servir du module Bilans et Statistiques > Circulation et inscrire les paramètres comme ci-dessous


Vous aurez un résultat de ce type : (ici 2003 renouvellements entre le 01/07/2012 et le 30/06/2013



2.7 Date du dernier prêt et nombre de prêt pour un type de document

Liste des documents selon une catégorie avec une colonne pour le nombre de prêt et une colonne pour la date du dernier prêt. Un rapport qui peut être utile pour faire de l’élagage.

Quote
select items.itype as 'Type de document',
biblio.title as 'Titre',
concat(replace(ExtractValue(metadata,'//datafield[@tag="650"]/subfield[@code="a"]'),'/',''),' ', replace(ExtractValue(metadata,'//datafield[@tag="650"]/subfield[@code="z"]'),'/','')) as Sujet,
items.barcode as 'Code à barres',
items.itemcallnumber as Cote,
count(old_issues.issuedate) as 'Total prêt',
MAX(old_issues.issuedate) as 'Date dernier prêt'
from
old_issues
left join items on (old_issues.itemnumber=items.itemnumber)
LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber = items.biblioitemnumber)
LEFT JOIN biblio ON (biblio.biblionumber = biblioitems.biblionumber)
where items.itype=<<Type de document|itemtypes>>
group by items.itemnumber
order by items.itemcallnumber

2.8 Documents avec X jours de retard

Liste des documents selon un nombre de jours de retard que vous devez indiquer dans un filtre lors de l’exécution du rapport.

SELECT
items.barcode as "Code barres",
biblio.title as "Titre",
items.itemcallnumber as "Cote",
items.replacementprice as "Prix de remplacement",
concat(borrowers.firstname,' ',borrowers.surname) as "Nom de l'emprunteur",
borrowers.borrowernumber,
issues.date_due as 'date de retour',
(TO_DAYS(curdate())-TO_DAYS( date_due)) AS 'jours retards'
FROM items
LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber)
LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber)
LEFT JOIN issues on (items.itemnumber=issues.itemnumber)
LEFT JOIN borrowers on (issues.borrowernumber=borrowers.borrowernumber)
WHERE (TO_DAYS(curdate())-TO_DAYS( date_due)) =<<nombre de jours de retard>> and issues.date_due is not null
order by borrowers.surname asc

2.9 Nombre de prêt sur la réserve de cours entre deux dates

select
count(statistics.datetime) as 'Total prêt'
from
statistics
left join items on items.itemnumber=statistics.itemnumber
left join course_items ci on ci.itemnumber=statistics.itemnumber
where ci.itemnumber is not null and statistics.type='ISSUE' and statistics.datetime between <<prêt entre le |date>> and <<et le|date>>

2.10 Nombre de prêt selon une catégorie entre deux dates

Pour ce rapport, vous pouvez vous servir du module Bilans et Statistiques > Circulation et inscrire les paramètres comme ci-dessous.


2.11 Liste des usagers avec des documents en prêts et en retard avec le montant d’amende attaché

Quote
SELECT
b.cardnumber,
concat(b.firstname,' ',b.surname) as "Nom de l'emprunteur",
i.price as Prix, i.replacementprice as 'Prix de remplacement',  
CONCAT('<a href=\"/cgi-bin/koha/catalogue/detail.pl?biblionumber=',i.biblionumber,'\">',i.barcode,'</a>') AS barcode,
     bib.title as Titre,
 (TO_DAYS(curdate())-TO_DAYS(ni.date_due)) AS 'Nombre de jours de retard',
format(a.amountoutstanding,2) as 'Amende pour le document'
FROM accountlines a
  LEFT JOIN borrowers b ON ( b.borrowernumber = a.borrowernumber )
  LEFT JOIN items i ON ( a.itemnumber = i.itemnumber )
  LEFT JOIN biblio bib ON ( i.biblionumber = bib.biblionumber )
  LEFT JOIN ( SELECT * FROM issues) ni ON ( ni.itemnumber = i.itemnumber AND ni.borrowernumber = a.borrowernumber )
WHERE
    a.amountoutstanding > 0 and b.categorycode=<<Catégorie usager|categorycode>> AND (TO_DAYS(curdate())-TO_DAYS(ni.date_due)) >=<<Nombre de jours de retard de plus de>>
GROUP BY a.description
ORDER BY b.surname asc

2.12 Listes des prêts selon une notice pour voir qui a fait l’action du prêt (logs)

Quote
select b.title,
al.timestamp,
al.action,
concat(bo.surname,' ', bo.firstname) as 'Utilisateur qui a fait action',
i.barcode,
concat(borrowers.surname,' ', borrowers.firstname) as 'Utilisateur'
from action_logs al
left join items i on al.info=i.itemnumber
left join biblioitems bi on i.biblioitemnumber=bi.biblioitemnumber
left join biblio b on b.biblionumber=bi.biblionumber
left join borrowers bo on bo.borrowernumber=al.user
left join borrowers borrowers on borrowers.borrowernumber=al.object
where module='circulation' and i.biblionumber=<<Numéro notice>>

2.13 Module utilisé pour le renouvellement d’un exemplaire (opac ou intranet) selon la carte d’un utilisateur

select s.datetime as 'Date transaction',
branch as Site,
biblio.title as Titre,
itemcallnumber as Cote,
barcode as Codebarre,
i.itype as 'Type de document',
i.location as Localisation
from statistics s
left join borrowers b on b.borrowernumber=s.borrowernumber
left join items i on i.itemnumber=s.itemnumber
left join biblioitems bi on bi.biblioitemnumber=i.biblioitemnumber
left join biblio on biblio.biblionumber=bi.biblionumber
where s.type='renew' and b.cardnumber=<<Numéro de carte>>
order by datetime desc

2.14 Liste des exemplaires non empruntés depuis X années

Quote

SELECT b.title as Titre,
 b.author as Auteur,
 b.copyrightdate as Date,
 i.itemcallnumber as Cote,
 i.barcode as Codebarres,
 i.datelastborrowed as 'Date dernier prêt',
 i.issues as 'Total prêt',
 i.dateaccessioned as 'Date création exemplaire'
FROM items i
LEFT JOIN biblio b USING (biblionumber)
LEFT JOIN issues USING (itemnumber)
WHERE i.itype=<<Type de document|itemtypes>> and issues.issuedate IS NULL AND i.datelastborrowed < DATE_SUB(CURDATE(), INTERVAL <<Nombre années>> YEAR)
limit 10000

2.15 File des réservations

Quote
SELECT
borrowers.surname as Nom,
borrowers.firstname as Prénom,
borrowers.cardnumber as 'Numéro carte',
reserves.reservedate AS 'date réservation',
reserves.priority as priorité,
CONCAT('<a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=',biblio.biblionumber,'">',biblio.title,'</a>') AS Titre,
biblio.author as Auteur,
GROUP_CONCAT(items.barcode,'-',IF(r2.found IS NOT NULL,'reserved',IF(onloan IS NOT NULL,'en prêt',IF(notforloan!=0,'notforloan',IF(itemlost!=0,'itemlost','disponible')))) SEPARATOR ' | ') AS 'Code barre - statut',
IF(reserves.itemnumber IS NULL, 'Prochain exemplaire disponible',barcode) AS 'Exemplaire spécifique'
FROM reserves
LEFT JOIN borrowers USING (borrowernumber)
LEFT JOIN biblio USING (biblionumber)
LEFT JOIN biblioitems USING (biblionumber)
LEFT JOIN items USING (biblionumber)
LEFT JOIN reserves r2 ON r2.itemnumber=items.itemnumber
WHERE (reserves.found IS NULL OR reserves.found != 'W')
GROUP BY reserves.reserve_id
ORDER BY Titre
limit 1000

2.16 Rapport de caisse

Quote
select
concat(borrowers.surname,', ',borrowers.firstname) as 'Nom du responsable',
borrowers.cardnumber,
concat(borrowers2.surname,', ',borrowers2.firstname) as 'Nom usager',
branches.branchname as 'site de la transaction',
date as 'Date transaction',
CASE
WHEN credit_type_code='C' then 'Credit'
WHEN credit_type_code='FOR' then 'Amnistie'
WHEN credit_type_code='W' then 'Amnistie'
WHEN debit_type_code='F' then 'Amende'
WHEN debit_type_code='FU' then 'Amende - Longue période'
WHEN debit_type_code='PAY' then 'Paiement'
WHEN debit_type_code='A' then 'Frais de gestion'
WHEN debit_type_code='M' then 'Divers'
WHEN debit_type_code='L' then 'Item perdu'
WHEN debit_type_code='N' then 'Nouvelle carte'
ELSE
'VALEUR INCONNUE'
end as TypeTransaction,
format(amount,2) as 'Montant',
accountlines.note,
accountlines.payment_type as 'Type de paiement',
CONCAT('<a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=',b.biblionumber,'\"target="_blank">',b.title,'</a>') as 'Titre de la notice',
items.barcode as 'Code à barres',
items.itype as 'Type de document'
FROM accountlines
LEFT JOIN borrowers ON (accountlines.manager_id=borrowers.borrowernumber)
LEFT JOIN borrowers borrowers2 ON (accountlines.borrowernumber=borrowers2.borrowernumber)
left join branches on (branches.branchcode =borrowers.branchcode )
left join items on accountlines.itemnumber=items.itemnumber
left join biblioitems bi on items.biblioitemnumber=bi.biblioitemnumber
left join biblio b on bi.biblionumber=b.biblionumber
where date(date) between <<Date transaction entre le|date>> and <<et le |date>> and branches.branchcode=<<Site transaction|branches>>
order by date asc, branches.branchname

2.17 Rapport de caisse – Total par type de paiement

Quote
select
format(sum(amount),2) as Total,
accountlines.payment_type as 'Type de paiement'
FROM accountlines
LEFT JOIN borrowers ON (accountlines.manager_id=borrowers.borrowernumber)
LEFT JOIN borrowers borrowers2 ON (accountlines.borrowernumber=borrowers2.borrowernumber)
left join branches on (branches.branchcode =borrowers.branchcode )
left join items on accountlines.itemnumber=items.itemnumber
left join biblioitems bi on items.biblioitemnumber=bi.biblioitemnumber
left join biblio b on bi.biblionumber=b.biblionumber
where accounttype='PAY' and date(date) between <<Date transaction entre le|date>> and <<et le |date>> and branches.branchcode=<<Site transaction|branches>>
group by accountlines.payment_type
order by date asc, branches.branchname

2.18 Consultations sur place (usage local) avec informations sur les exemplaires


QuoteSELECT
statistics.type,
statistics.itemtype,
statistics.datetime,
statistics.borrowernumber,
items.barcode, biblio.title
FROM statistics
left join items on statistics.itemnumber=items.itemnumber
left join biblioitems on items.biblioitemnumber=biblioitems.biblioitemnumber
left join biblio on items.biblionumber = biblio.biblionumber
WHERE statistics.type='localuse'

3. Catalogage

3.1 Notices contenant une valeur spécifique dans une zone et sous-zone particulière

Quote
SELECT biblionumber, biblio.title, biblio.author
FROM biblio_metadata
left JOIN biblio ON (biblio_metadata.biblionumber = biblio.biblionumber)
WHERE ExtractValue(metadata, "//datafield[@tag=<< Zone (XXX)>>]/subfield[@code=<<Sous-zone (Y)>>]")
LIKE <<Terme recherché (utiliser les % comme troncature)>>



3.2 Liste des documents pour une localisation précise.

Ce rapport liste tous les documents d’une localisation (étagère) précise.

Remarque : Ce rapport vous montre aussi qu’il est possible d’utiliser les valeurs autorisées pour poser une question lors de l’exécution du rapport.

Colonnes affichées :

  • Biblionumber : Numéro uniquement de la notice.
  • Author : Auteur
  • Title : Titre du document
  • Année : Date de publication
  • Itemcallnumber : Cote du document
  • Barcode : Code à barres
  • Notforloan : Valeur d’exclusion du prêt.

SELECT
biblio.biblionumber,biblio.author,biblio.title,biblio.copyrightdate,items.location,items.itemcallnumber,items.barcode,items.notforloan
FROM items
LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber)
LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber)
where
location = <<Localisation|LOC>>;

Exemple visuel


3.3 Liste des notices supprimées selon un intervalle de date

Ce rapport permet de voir les documents qui ont été supprimés selon un intervalle de date.
WarningATTENTION! La table deletedbiblio, sur laquelle ce rapport est construit, ne comprend que les notices supprimées des derniers 365 jours.
Quote
select biblionumber as 'Numéro de notice',
author as 'Auteur',
title as Titre,
copyrightdate as 'Date copyright'
from deletedbiblio
left join deletedbiblio_metadata USING (biblionumber)
where date(deletedbiblio.timestamp) between <<notices supprimées entre le|date>> AND <<et le|date>>
and metadata not like '%Réservoir de notice%'

3.4 Nombre de notices par type bibliographique (zone 000, sous-zone 6)

Quote
SELECT
CASE SUBSTR(metadata,INSTR(metadata, "<leader>")+8+6,2)
WHEN 'am' THEN 'Livre'
WHEN 'as' THEN 'Périodiques'
WHEN 'cm' THEN 'Musique notée'
WHEN 'em' THEN 'Carte'
WHEN 'gm' THEN 'Média projeté'
WHEN 'im' THEN 'Enregistrement non-musical'
WHEN 'jm' THEN 'Enregistrement musical'
WHEN 'mm' THEN 'Fichier informatique'
WHEN 'rm' THEN 'Artefact 3D'
WHEN 'tm' THEN 'Manuscrit'
ElSE 'Type inconnu' END
AS Type, count(DISTINCT biblioitems.biblionumber) AS 'Nombre de notices'
      FROM biblioitems
      LEFT JOIN biblio_metadata on (biblio_metadata.biblionumber=biblioitems.biblionumber)
GROUP BY Type

3.5 Liste des notices selon intervalle de cote Dewey





























Quote



























SELECT biblio.title as Titre, items.itemcallnumber as Cote, items.biblionumber as 'Numéro notice'
FROM items
LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber)
LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber)
WHERE items.itemcallnumber >= <<cote dewey entre>> AND items.itemcallnumber <= <<et cote dewey>>
limit 1000























































3.6 Liste des exemplaires supprimés selon intervalle de date





























Quote



























select i.biblionumber as 'Numéro de notice',
i.barcode as Codebarres,
b.author as 'Auteur',
b.title as Titre,
b.copyrightdate as 'Date copyright'
from deleteditems i
left join deletedbiblio b on i.biblionumber=b.biblionumber
where date(i.timestamp) between <<exemplaires supprimés entre le (AAAA-MM-JJ)>> AND <<et le (AAAA-MM-JJ)>>























































3.7 Réserve de cours





























Quote



























select biblio.title as Titre,
cr.course_number as 'Numéro cours',
cr.course_name as 'Nom du cours',
concat(b.firstname,' ',b.surname) as 'Nom du professeur',
i.location as Localisation,
i.barcode as 'Code barres',
i.itemcallnumber as Cote
from courses cr
left join course_instructors ci on cr.course_id=ci.course_id
left join borrowers b on ci.borrowernumber=b.borrowernumber
left join course_reserves on cr.course_id=course_reserves.course_id
left join course_items on course_reserves.ci_id=course_items.ci_id
left join items i on course_items.itemnumber=i.itemnumber
left join biblioitems bi on bi.biblioitemnumber=i.biblioitemnumber
left join biblio on biblio.biblionumber=bi.biblionumber
order by cr.course_name























































3.8 Liste des notices sans langues dans la 008





























Quote



























Select
biblio.biblionumber,
substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) as 'Langue 008 35-37',
ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="a"]') as 'Langue 041 $a',
ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="b"]') as 'Langue 041 $b',
ExtractValue(metadata,'//datafield[@tag="942"]/subfield[@code="c"]') as 'Type Koha',
ExtractValue(metadata,'//datafield[@tag="980"]/subfield[@code="m"]') as 'Type Manitou',
items.itype as 'ItemType',
items.itemcallnumber as 'Cote',
concat(replace(ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="a"]'),'/',''),' ', replace(ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="b"]'),'/','')) as 'Titre'
FROM items
LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber)
LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber)
























































      LEFT JOIN biblio_metadata on (biblio_metadata.biblionumber=biblio.biblionumber)
WHERE
substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) = ' '
LIMIT 10000
























































3.9 Liste des notices pour une langue





























Quote



























Select
biblio.biblionumber as 'Notice',
substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) as 'Langue 008 35-37',
ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="a"]') as 'Langue 041 $a',
ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="b"]') as 'Langue 041 $b',
ExtractValue(metadata,'//datafield[@tag="942"]/subfield[@code="c"]') as 'Type Koha',
ExtractValue(metadata,'//datafield[@tag="980"]/subfield[@code="m"]') as 'Type Manitou',
items.itype as 'ItemType',
items.itemcallnumber as 'Cote',
concat(replace(ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="a"]'),'/',''),' ', replace(ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="b"]'),'/','')) as 'Titre'
FROM items
LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber)
LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber)
LEFT JOIN biblio_metadata on (biblio_metadata.biblionumber=biblio.biblionumber)

where substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) = <<Code 008>>
OR ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="b"]') LIKE <<Code 041b>>
OR ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="a"]') LIKE <<Code 041a>>
LIMIT 5000

















































































































3.10 Liste des notices avec 008 ni ENG ni FRE ni SPA ni vide





























Quote



























Select
biblio.biblionumber as 'Notice',
substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) as 'Langue 008 35-37',
ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="a"]') as 'Langue 041 $a',
ExtractValue(metadata,'//datafield[@tag="041"]/subfield[@code="b"]') as 'Langue 041 $b',
ExtractValue(metadata,'//datafield[@tag="942"]/subfield[@code="c"]') as 'Type Koha',
ExtractValue(metadata,'//datafield[@tag="980"]/subfield[@code="m"]') as 'Type Manitou',
items.itype as 'ItemType',
items.itemcallnumber as 'Cote',
concat(replace(ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="a"]'),'/',''),' ', replace(ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="b"]'),'/','')) as 'Titre'
FROM items
LEFT JOIN biblioitems on (items.biblioitemnumber=biblioitems.biblioitemnumber)
LEFT JOIN biblio on (biblioitems.biblionumber=biblio.biblionumber)
























































      LEFT JOIN biblio_metadata on (biblio_metadata.biblionumber=biblio.biblionumber)

























































where substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) <> 'FRE'
AND substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) <> 'ENG'
AND substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) <> 'SPA'
AND substring(ExtractValue(metadata,'//controlfield[@tag="008"]'),36,3) <> ' '
LIMIT 5000

























































3.11 Liste des autorités en double





























Quote



























select group_concat(CONCAT('<a href=\"/cgi-bin/koha/authorities/detail.pl?authid=',authid,'\"target="_blank">',authid,'</a>') separator ', ') AS Identifiant,
GROUP_CONCAT(DISTINCT ExtractValue(marcxml,'//datafield[@tag="040"]/subfield[@code="a"]') SEPARATOR ' , ') as '040$a',
GROUP_CONCAT(DISTINCT ExtractValue(marcxml,'//datafield[@tag="970"]/subfield[@code="a"]') SEPARATOR ' , ') as '970$a',
concat('<a href="/cgi-bin/koha/authorities/authorities-home.pl?op=do_search&type=intranet&marclist=all&and_or=and&operator=contains&value=',extractvalue(marcxml,"//datafield[@tag=<<Étiquette de la vedette (dans la clause SELECT)>>]/subfield[@code>='a']"),'\"target=_blank">',
extractvalue(marcxml,"//datafield[@tag=<<Étiquette de la vedette (dans la clause SELECT)>>]/subfield[@code>='a']"),'</a>') AS Vedette
from auth_header
where extractvalue(marcxml,"//datafield[@tag=<<Étiquette de la vedette (dans la clause WHERE)>>]/subfield[@code>='a']")!=''
group by extractvalue(marcxml,"//datafield[@tag=<<Étiquette de la vedette (dans la clause GROUP BY)>>]/subfield[@code>='a']")
having count(extractvalue(marcxml,"//datafield[@tag=<<Étiquette de la vedette (dans la clause HAVING)>>]/subfield[@code>='a']"))>1























































Consultez la vidéo ci-dessous pour savoir comment utiliser ce rapport.



3.12 Autorités en double avec type différent

Quote



























SELECT GROUP_CONCAT(CONCAT('<a href=\"/cgi-bin/koha/authorities/authorities-home.pl?op=do_search&type=intranet&marclist=all&and_or=and&operator=contains&value=',authid,'\">',authid,'</a>') SEPARATOR ', ') AS autorité,
CONCAT('<a href=\"/cgi-bin/koha/authorities/merge.pl?authid=',MAX(authid),'&authid=',MIN(authid),'\" target="_blank">Fusion</a>') AS Fusion, GROUP_CONCAT(authtypecode SEPARATOR ',') as type,
concat(
ExtractValue(`marcxml`,'//datafield[@tag="100"]/*'), -- Nom de personne
ExtractValue(`marcxml`,'//datafield[@tag="110"]/*'), -- Collectivités
ExtractValue(`marcxml`,'//datafield[@tag="111"]/*'), -- Réunion/Congrés
ExtractValue(`marcxml`,'//datafield[@tag="130"]/*'), -- Titre uniforme
ExtractValue(`marcxml`,'//datafield[@tag="148"]/*'), -- Sub chrono
ExtractValue(`marcxml`,'//datafield[@tag="150"]/*'), -- Sujet
ExtractValue(`marcxml`,'//datafield[@tag="151"]/*'), -- Sub géo
ExtractValue(`marcxml`,'//datafield[@tag="155"]/*') -- Genre forme
) main_heading
FROM auth_header
GROUP BY marc HAVING count(authid) > 1
ORDER BY marc limit 10000



























Aperçu : Le lien dans la colonne Fusion amène directement à la page de fusion des autorités




3.13 Notices bibliographiques sans autorités liées

3.13.1 Sujets dans la zone 650

Ce rapport va chercher dans la notice bibliographique si un champ 650 est rempli et s’il y a également le $9 qui est rempli. Si le $9 est vide (autorité non liée), le numéro de la notice va s’afficher dans la colonne « Modifier notice » et dans la colonne « Vedettes, il y aura le contenu de la zone 650$a.





























Quote



























SELECT
biblioitems.biblionumber,
ExtractValue(metadata,'//datafield[@tag="650"]/subfield[@code="a"]') AS Vedettes
FROM biblioitems
left join items on biblioitems.biblioitemnumber=items.biblioitemnumber
























































      LEFT JOIN biblio_metadata on (biblio_metadata.biblionumber=biblioitems.biblionumber)

WHERE length(ExtractValue(metadata, '//datafield[@tag="650"]/subfield[@code="a"]')) != 0
AND length(ExtractValue(metadata, '//datafield[@tag="650"]/subfield[@code="9"]')) = 0
ORDER BY Vedettes























































3.13.2 Auteurs dans la zone 100





























Quote



























SELECT
bm.biblionumber,
ExtractValue(metadata,'//datafield[@tag="100"]/subfield[@code="a"]') AS Auteur100
FROM biblio_metadata bm
left join items on bm.biblionumber=items.biblionumber
WHERE length(ExtractValue(metadata, '//datafield[@tag="100"]/subfield[@code="a"]')) != 0
AND length(ExtractValue(metadata, '//datafield[@tag="100"]/subfield[@code="9"]')) = 0
group by bm.biblionumber
ORDER BY Auteur100























































3.13.3 Auteurs dans la zone 110





























Quote



























SELECT
bm.biblionumber,
ExtractValue(metadata,'//datafield[@tag="110"]/subfield[@code="a"]') AS Auteur110
FROM biblio_metadata bm
left join items on bm.biblionumber=items.biblionumber
WHERE length(ExtractValue(metadata, '//datafield[@tag="110"]/subfield[@code="a"]')) != 0
AND length(ExtractValue(metadata, '//datafield[@tag="110"]/subfield[@code="9"]')) = 0
group by bm.biblionumber
ORDER BY Auteur110























































3.13.4 Auteurs dans la zone 700





























Quote



























SELECT
bm.biblionumber,
ExtractValue(metadata,'//datafield[@tag="700"]/subfield[@code="a"]') AS Auteur700
FROM biblio_metadata bm
left join items on bm.biblionumber=items.biblionumber
WHERE length(ExtractValue(metadata, '//datafield[@tag="700"]/subfield[@code="a"]')) != 0
AND length(ExtractValue(metadata, '//datafield[@tag="700"]/subfield[@code="9"]')) = 0
group by bm.biblionumber
ORDER BY Auteur700


























































Quote
SELECT
bm.biblionumber, 
ExtractValue(metadata,'//datafield[@tag="700"]/subfield[@code="a"]') AS Auteur700,
ExtractValue(metadata,'//datafield[@tag="245"]/subfield[@code="a"]') AS Titre
FROM biblio_metadata bm
left join items on bm.biblionumber=items.biblionumber
WHERE  ((length(ExtractValue(metadata, '//datafield[@tag="700"][1]/subfield[@code="a"]')) != 0 AND length(ExtractValue(metadata, '//datafield[@tag="700"][1]/subfield[@code="9"]')) = 0)
        OR (length(ExtractValue(metadata, '//datafield[@tag="700"][2]/subfield[@code="a"]')) != 0 AND length(ExtractValue(metadata, '//datafield[@tag="700"][2]/subfield[@code="9"]')) = 0) 
        OR (length(ExtractValue(metadata, '//datafield[@tag="700"][3]/subfield[@code="a"]')) != 0 AND length(ExtractValue(metadata, '//datafield[@tag="700"][3]/subfield[@code="9"]')) = 0)
        OR (length(ExtractValue(metadata, '//datafield[@tag="700"][4]/subfield[@code="a"]')) != 0 AND length(ExtractValue(metadata, '//datafield[@tag="700"][4]/subfield[@code="9"]')) = 0))
        AND metadata not like '%Réservoir de notices%'
GROUP BY bm.biblionumber
ORDER BY Auteur700
LIMIT 1000


3.13.5 Auteurs dans les zones 710





























Quote



























SELECT
bm.biblionumber,
ExtractValue(metadata,'//datafield[@tag="710"]/subfield[@code="a"]') AS Auteur700
FROM biblio_metadata bm
left join items on bm.biblionumber=items.biblionumber
WHERE length(ExtractValue(metadata, '//datafield[@tag="710"]/subfield[@code="a"]')) != 0
AND length(ExtractValue(metadata, '//datafield[@tag="710"]/subfield[@code="9"]')) = 0
group by bm.biblionumber
ORDER BY Auteur710























































3.14 Notices bibliographiques arrimées à la mauvaise autorité

Ce rapport permet de retrouver les notices bibliographiques contenant dans les zones d'autorités un $9 qui fait un lien avec une autorité qui n'existe plus dans votre banque locale. Lors de l'exécution du rapport, vous devez inscrire la zone d'autorités souhaitée, par exemple : 100.
Quote
SELECT
biblio_metadata.biblionumber, 
biblio.title "Titre"
      
FROM biblio_metadata
LEFT JOIN biblio USING (biblionumber)

WHERE length(ExtractValue(metadata, " // datafield[@tag ='650' ] / subfield[@code =9 ]"))>0
AND ExtractValue(metadata, " // datafield[@tag ='650' ] / subfield[@code =9 ]") NOT IN (SELECT authid FROM auth_header) 

3.15 Statistiques sur les liens cliqués des notices à l’opac

La préférence système TrackClicks permet de comptabiliser les clics qui sont fait à l’OPAC sur des liens dans une notice.

Il y a 3 choix possible dans la préférence système :

Si vous choisissez suivre anonymement, vous n’aurez pas accès au numéro de l’utilisateur qui a cliqué sur le lien s’il était connecté. Si vous choisissez Suivre, le numéro de l’utilisateur sera enregistré s’il clique sur le lien lorsqu’il est connecté à son compte.





























Quote



























select biblionumber as 'numéro notice',itemnumber as 'numéro exemplaire',url, count(timeclicked) as 'Total'
from linktracker
where timeclicked between <<lien cliqué entre le|date>> and <<et le|date>>
group by url























































3.16 Notices par site et par statut de perte (champs $7 de l’exemplaire)





























Quote



























SELECT
biblio.biblionumber,
items.itemcallnumber as Cote,
biblio.title as Titre,
authorised_values.lib as Statut
FROM biblio
LEFT JOIN items on (items.biblionumber=biblio.biblionumber)
left join biblioitems on (biblioitems.biblionumber=biblio.biblionumber)
LEFT JOIN authorised_values ON items.notforloan = authorised_values.authorised_value
where items.homebranch=<<Site permanent de l'exemplaire|branches>> and items.notforloan=<<statut de perte|NOT_LOAN>> and authorised_values.category="not_loan"
group by biblio.biblionumber
order by items.itemcallnumber asc
limit 10000























































3.17 Nombre de notices dans le catalogue





























Quote



























SELECT COUNT(*) AS 'Nombre de notices' FROM biblio























































3.18 Notices Curio qui ont un statut « d » (notices supprimées du site Curio)





























Quote



























select biblio.biblionumber,
biblio.title,
items.itemnumber,
biblioitems.url,
substring(ExtractValue(metadata,'//leader'),6,1)
from biblioitems
left join items on items.biblioitemnumber=biblioitems.biblioitemnumber
left join biblio on biblioitems.biblionumber=biblio.biblionumber
























































      LEFT JOIN biblio_metadata on (biblio_metadata.biblionumber=biblio.biblionumber)
where substring(ExtractValue(metadata,'//leader'),6,1)='d'
limit 10000

























































3.19 Liste des autorités triées par type





























Quote



























SELECT authid as Numéro,
datecreated as 'Date création', authtypecode as Type, concat(
ExtractValue(`marcxml`,'//datafield[@tag="100"]/*'), -- Nom de personne
ExtractValue(`marcxml`,'//datafield[@tag="110"]/*'), -- Collectivités
ExtractValue(`marcxml`,'//datafield[@tag="111"]/*'), -- Réunion/Congrés
ExtractValue(`marcxml`,'//datafield[@tag="130"]/*'), -- Titre uniforme
ExtractValue(`marcxml`,'//datafield[@tag="148"]/*'), -- Sub chrono
ExtractValue(`marcxml`,'//datafield[@tag="150"]/*'), -- Sujet
ExtractValue(`marcxml`,'//datafield[@tag="151"]/*'), -- Sub géo
ExtractValue(`marcxml`,'//datafield[@tag="155"]/*') -- Genre forme
) main_heading
FROM `auth_header`
ORDER BY authtypecode, main_heading























































3.20 Notices contenant une valeur spécifique dans une zone et sous-zone particulière





























Quote



























SELECT biblio.biblionumber, biblio.title as Titre, biblio.author as Auteur
FROM biblio_metadata
left JOIN biblio ON (biblio_metadata.biblionumber = biblio.biblionumber)
WHERE ExtractValue(metadata, "//datafield[@tag=<< Zone marc (XXX)>>]/subfield[@code=<<sous-zone (Y)>>]")
LIKE <<Terme recherché (utiliser % pour troncature)>>























































3.21 Autorités contenant une valeur spécifique dans une zone et sous-zone particulière





























Quote



























SELECT CONCAT('<a href=\"/cgi-bin/koha/authorities/detail.pl?authid=',authid,'\">',authid,'</a>') AS 'Numéro autorité',
ExtractValue(marcxml,'//datafield[@tag="150"]/subfield[@code="a"]') as '150a',
ExtractValue(marcxml,'//datafield[@tag="100"]/subfield[@code="a"]') as '100a',
ExtractValue(marcxml,'//datafield[@tag="110"]/subfield[@code="a"]') as '110a',
ExtractValue(marcxml,'//datafield[@tag="111"]/subfield[@code="a"]') as '111a',
ExtractValue(marcxml,'//datafield[@tag="130"]/subfield[@code="a"]') as '130a',
ExtractValue(marcxml,'//datafield[@tag="151"]/subfield[@code="a"]') as '151a',
ExtractValue(marcxml,'//datafield[@tag="155"]/subfield[@code="a"]') as '155a',
ExtractValue(marcxml,'//datafield[@tag="040"]/subfield[@code="a"]') as '040a',
ExtractValue(marcxml,'//datafield[@tag="970"]/subfield[@code="a"]') as '970a'
FROM auth_header
WHERE ExtractValue(marcxml, "//datafield[@tag=<< Zone marc (XXX)>>]/subfield[@code=<<sous-zone (Y)>>]")
LIKE <<Terme recherché (utiliser % pour troncature)>>
























































3.22 Exemplaires les plus empruntés selon numéro d’autorité





























Quote



























SELECT count(s.datetime) AS Total, b.title as Titre, b.author as Auteur,
b.biblionumber
FROM statistics s
JOIN items i ON (i.itemnumber=s.itemnumber)
LEFT JOIN biblio b ON (b.biblionumber=i.biblionumber)
LEFT JOIN biblio_metadata bi on (b.biblionumber=bi.biblionumber)
WHERE ExtractValue(metadata,'//datafield[@tag="650"]/*') like <<Numéro autorité (entourés de %) >> and DATE(s.datetime) > DATE_SUB(CURRENT_DATE(),INTERVAL 12 MONTH)
AND DATE(s.datetime)<=CURRENT_DATE() AND
s.itemnumber IS NOT NULL AND s.type IN ('issue','renew')
GROUP BY b.biblionumber
ORDER BY Total DESC
limit 100























































3.23 Exemplaires avec des chiffres dans la zone 952$3





























Quote



























select biblio.title as Titre,
biblio.biblionumber as 'Numéro notice',
itemcallnumber as Cote,
materials as Matériels,barcode as Codebarre,
itype as 'Type de document'
from items
left join biblioitems on items.biblioitemnumber=biblioitems.biblioitemnumber
left join biblio on biblio.biblionumber=items.biblionumber
where materials ='1' or materials='2' or materials='3' or materials='4' or materials='5' or materials='6' or materials='7'
order by materials asc
limit 10000























































3.24 Notices dont les zones 5XX contiennent plus de 10 000 caractères

Quote
SELECT biblio_metadata.biblionumber, ExtractValue(metadata,'//datafield[@tag="500"]/subfield[@code="a"]') as '500', ExtractValue(metadata,'//datafield[@tag="505"]/*') as '505', ExtractValue(metadata,'//datafield[@tag="508"]/*') as '508', ExtractValue(metadata,'//datafield[@tag="520"]/*') as '520' 
FROM biblio_metadata 
WHERE length (ExtractValue( metadata, '//datafield[@tag="500"]/subfield[@code="a"]' )) > 10000 
OR length (ExtractValue( metadata, '//datafield[@tag="505"]/*' )) > 10000 
OR length (ExtractValue( metadata, '//datafield[@tag="508"]/*' )) > 10000 
OR length (ExtractValue( metadata, '//datafield[@tag="520"]/*' )) > 10000

3.25 Récupérer les autorités BTA

Quote



























SELECT
CONCAT('<a href="/cgi-bin/koha/authorities/detail.pl?authid=',authid,'\" target="_blank" rel="noopener">',authid,'</a>') as 'Notice',
authtypecode as 'Type autorité',
CONCAT (
extractvalue(marcxml,"//datafield[@tag=150]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=100]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=110]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=148]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=155]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=130]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=151]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=185]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=180]/subfield[@code='a']"),' ',
extractvalue(marcxml,"//datafield[@tag=181]/subfield[@code='a']")) as 'Autorité',
ExtractValue(marcxml,'//controlfield[@tag="005"]') as 'Zone 005',
extractvalue(marcxml,"//datafield[@tag=970]/subfield[@code='a']") as 'Zone 970$a'
from auth_header
where extractvalue(marcxml,"//datafield[@tag=970]/subfield[@code='a']")='BTA'
LIMIT 10000




























4. Acquisitions

4.1 Récapitulatifs des acquisitions pour une année budgétaire





























Quote



























SELECT
aqorders.ordernumber as ' No commande',
aqorders.invoiceid as 'No facture',
aqbooksellers.name as 'Nom du fournisseur',
aqbudgets.budget_code as 'Code',
aqorders.basketno as 'Panier',
aqorders.biblionumber as 'No Notice',
biblio.title as 'Titre',
aqorders.ecost as 'Prix estimé commandé',
aqorders.entrydate as 'Commandé le',
format (aqorders.listprice,2) as 'Prix fournisseur commandé',
aqorders.quantity as 'Quantité commandé',
format (aqorders.unitprice,2) as 'Prix unitaire facturé',
aqorders.quantityreceived as 'Quantité facturée',
format((aqorders.quantityreceived * aqorders.unitprice),2) as 'Total prix facturé',
aqorders.datereceived as 'Reçu le',
aqorders.rrp as 'Prix de remplacement'
FROM aqorders
LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber
LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id
LEFT JOIN aqbasket ON aqbasket.basketno = aqorders.basketno
LEFT JOIN aqbooksellers ON aqbooksellers.id = aqbasket.booksellerid
where
aqorders.datecancellationprinted is null and aqbudgets.budget_period_id = << Période budgétaire. Ex.: 21>>
order by aqorders.datereceived, aqbudgets.budget_name, aqorders.basketno
LIMIT 5000























































4.2 Liste des documents commandés selon poste budgétaire

Il y a dans ce rapport un filtre sur la date de la commande et un filtre sur le poste budgétaire. Pour connaitre l’identifiant du poste budgétaire, il faut vous rendre dans Acquisitions > Postes budgétaires > Modifier le poste budgétaire. Dans l’url de cette page, il faut repérer le numéro inscrit après budget_id . Ce rapport va vous donner la liste des documents qui ont été commandés et pas encore reçu.






























Quote



























SELECT
biblio.title as 'Titre',
aqorders.entrydate as 'Date commande',
format (aqorders.listprice,2) as 'Prix fournisseur commandé'
FROM aqorders
LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber
LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id
LEFT JOIN aqbasket ON aqbasket.basketno = aqorders.basketno
LEFT JOIN aqbooksellers ON aqbooksellers.id = aqbasket.booksellerid
where
aqorders.unitprice='0.00' and aqorders.datecancellationprinted is null and aqbudgets.budget_id= <<identifiant du poste budgétaire>> and aqorders.biblionumber is not null and aqorders.entrydate between <<date de la commande entre|date>> and <<et le|date>>
order by aqorders.datereceived, aqbudgets.budget_name, aqorders.basketno
LIMIT 5000























































4.3 Liste des fournisseurs non utilisés





























Quote



























select
CONCAT('<a href="/cgi-bin/koha/acqui/booksellers.pl?booksellerid=',a.id,'\"target="_blank">',a.name,'</a>') as Fournisseur
from
aqbooksellers a
left join aqbasket ab on a.id=ab.booksellerid
where basketno is null
























































4.4 Liste des documents achetés par poste budgétaire avec lien de notices à l’opac

Il faut inscrire à la place du texte en rouge, l’identifiant du budget. Pour connaitre l’identifiant du budget, il faut cliquer sur le budget dans la page d’accueil des budgets et dans l’url affiché vous aurez le texte suivant : budget_period_id=. Le chiffre qui est après le signe = est l’identifiant du budget.

Lors de l’exécution du rapport le nom du poste budgétaire vous sera demandé.

Seulement le titre et l’auteur apparaissent dans le tableau et le titre est cliquable pour ouvrir la notice à l’OPAC. En exportant ce tableau dans un fichier excel ou word, vous pourriez diffuser l’information à vos professeurs par exemple.





























Quote



























SELECT
CONCAT('<a href=\"', IF(CHAR_LENGTH(systempreferences.value),
CONCAT('http://', systempreferences.value), ''), '/cgi-bin/koha/opac-detail.pl?biblionumber=',biblio.biblionumber,'\">',biblio.title,'</a>') AS Titre,
biblio.author as Auteur
FROM systempreferences, biblio
LEFT JOIN aqorders ON aqorders.biblionumber = biblio.biblionumber
LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id
LEFT JOIN aqbasket ON aqbasket.basketno = aqorders.basketno
where
systempreferences.variable='OPACBaseURL' and
aqbudgets.budget_period_id='IDENTIFIANT_BUDGET' and
aqorders.datecancellationprinted is null and aqorders.biblionumber is not null and aqbudgets.budget_name=<<Poste budgétaire>>
LIMIT 5000























































4.5 Total facturé par fournisseur (Rapport au Ministère)

Pour connaitre l’identifiant du budget, il faut cliquer sur le budget dans la page d’accueil des budgets et dans l’url affiché vous aurez le texte suivant : budget_period_id=. Le chiffre qui est après le signe = est l’identifiant du budget.

Ce rapport peut exclure également deux types de document, à savoir par exemple les DVD et les CD, il faut pour cela changer le texte TYPE_DOC par les codes des types de document que vous trouverez dans le tableau des Types de documents dans le module Administration. Si vous n’avez qu’un seul type de document à exclure, il faut alors supprimer cette partie du code and biblioitems.itemtype NOT LIKE ‘TYPE_DOC’.





























Quote



























SELECT
aqbooksellers.name as 'Nom du fournisseur',
SUM(aqorders.quantityreceived) as 'Quantité facturée',
format(sum(aqorders.quantityreceived * aqorders.unitprice),2) as 'Total prix facturé'

FROM aqorders
LEFT JOIN biblioitems ON aqorders.biblionumber = biblioitems.biblionumber
LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id
LEFT JOIN aqbasket ON aqbasket.basketno = aqorders.basketno
LEFT JOIN aqbooksellers ON aqbooksellers.id = aqbasket.booksellerid

where
aqorders.datecancellationprinted is null and aqbudgets.budget_period_id = << Période budgétaire. Ex.: 51>> and biblioitems.itemtype NOT LIKE 'TYPE_DOC' and biblioitems.itemtype NOT LIKE 'TYPE_DOC'
group by aqbooksellers.name

order by aqbooksellers.name























































4.6 Commandes par budget (avec notes)





























Quote



























SELECT
aqbudgets.budget_name as 'Poste budgétaire',
CONCAT('<a href="/cgi-bin/koha/acqui/basket.pl?basketno=',aqbasket.basketno,'\"target="_blank">',aqbasket.basketno,'</a>') as Panier,
concat(borrowers.firstname,' ',borrowers.surname) as 'Panier par',
CONCAT('<a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=',biblio.biblionumber,'\"target="_blank">',biblio.title,'</a>') as 'Titre',
items.itemcallnumber as Cote,
aqorders.currency as Devise,
format (aqorders.listprice,2) as 'Prix fournisseur commandé',
format (aqorders.rrp,2) as 'Prix de remplacement',
format (aqorders.ecost,2) as 'Coût budgeté',
aqorders.quantity as Quantité,
aqorders.quantity * aqorders.rrp as 'Total',
format((aqorders.quantity * aqorders.ecost),2) as 'Coût total',
aqorders.entrydate as 'Date entrée',
aqorders.datereceived as 'Reçu le',
aqorders.order_internalnote as 'Note interne',
aqorders.order_vendornote as 'Note au fournisseur'
FROM aqorders
LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber
left join aqorders_items ai on ai.ordernumber = aqorders.ordernumber
left join items on items.itemnumber = ai.itemnumber
LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id
LEFT JOIN aqbasket ON aqbasket.basketno = aqorders.basketno
LEFT JOIN aqbooksellers ON aqbooksellers.id = aqbasket.booksellerid
LEFT JOIN aqbudgetperiods ON aqbudgetperiods.budget_period_id=aqbudgets.budget_period_id
LEFT JOIN borrowers on borrowers.borrowernumber=aqbasket.authorisedby
where  aqorders.datecancellationprinted is null and
aqbudgets.budget_name like <<nom du poste budgétaire>> and aqbudgetperiods.budget_period_active='1'
order by aqbasket.basketno
LIMIT 5000























































4.7 Notices avec requérant

Ce rapport aide à repérer les notices dont le champ Requérant est rempli. Le champ Requérant a été rajouté dans la grille de catalogage dans la zone 952, dans l’exemple cette sous-zone se nomme D. Si votre champ porte une autre lettre, il faut changer le code en rouge dans la requête ci-dessous.


 

  

 




























Quote



























Select
b.biblionumber,
b.title 'Titre',
b.author as Auteur,
itemtypes.description as 'Type de document',
authorised_values.lib as Localisation,
av.lib as Statut,
ExtractValue(items.more_subfields_xml,'//datafield[@tag="999"]/subfield[@code="D"]') as Requérant
from items
left join biblioitems bi on bi.biblioitemnumber=items.biblioitemnumber
left join biblio b on b.biblionumber=bi.biblionumber
left join itemtypes on itemtypes.itemtype=items.itype
LEFT JOIN authorised_values ON items.location = authorised_values.authorised_value
left join authorised_values av on items.notforloan = av.authorised_value
where authorised_values.category='loc' and av.category='not_loan'  and ExtractValue(items.more_subfields_xml,'//datafield[@tag="999"]/subfield[@code="D"]')<>'' and ExtractValue(items.more_subfields_xml,'//datafield[@tag="999"]/subfield[@code="D"]') like <<Nom requerant>>
order by Requerant asc, b.title asc
limit 10000
























































5. Utilisateurs

5.1 Liste des usagers expirés qui n’ont pas de prêt en cours

Ce rapport donne la liste des usagers dont le dossier est expiré pour une année choisie. Ces usagers n’auront pas de prêt en cours.





























Quote



























SELECT
concat(surname,' ', firstname) as Usager,
cardnumber as 'Numéro carte'
FROM borrowers
WHERE borrowernumber
NOT IN (SELECT borrowernumber FROM issues)
AND YEAR(dateexpiry) = <<Année>>
























































5.2 Liste des usagers sans adresse courriel





























Quote



























SELECT
concat(surname,' ', firstname) as Usager,
cardnumber as 'Numéro carte',
branchcode as Site,
dateexpiry as 'Date expiration'
FROM borrowers
WHERE ' ' IN (email)























































5.3 Liste des usagers avec un message ou une note

Ce rapport vous donnera la liste des usagers qui ont un message de circulation ou une note à leur dossier.




















































































Quote



























SELECT b.cardnumber as 'Numéro carte', b.surname as Nom, b.firstname as Prénom,
b.opacnote as 'Note opac', b.borrowernotes as 'Note intranet', group_concat(DISTINCT m.message separator ', ') AS 'Message de circulation'
FROM borrowers b
LEFT JOIN messages m USING (borrowernumber)
WHERE b.branchcode=<<Branch|branches>> AND ((b.opacnote IS NOT
NULL AND b.opacnote != '') OR (b.borrowernotes IS NOT NULL AND
b.borrowernotes != '') OR (m.message IS NOT NULL AND
m.message != '')) GROUP BY b.borrowernumber ORDER BY b.surname ASC,
b.firstname ASC



















































































5.4 Liste des usagers en double





























Quote



























SELECT surname as Nom, firstname as Prénom, GROUP_CONCAT(CONCAT('<a href="/cgi-bin/koha/circ/circulation.pl?borrowernumber=',borrowers.borrowernumber,'\"target="_blank">',borrowers.borrowernumber,'</a>') SEPARATOR ', ') AS 'Numéro de carte'
FROM borrowers
GROUP BY CONCAT(trim(surname),"/",trim(firstname),"/")
HAVING COUNT(CONCAT(trim(surname),"/",trim(firstname),"/"))>1























































5.5 Nombre d’usagers par catégorie et par site





























Quote



























select count(*) as Total,
categorycode as Catégorie,
branchcode as Site
from borrowers
group by branchcode,categorycode
























































6. Périodiques

6.1 Liste des fascicules en retard

Ce rapport donne la liste des fascicules en retard.

Vous pouvez adapter ce rapport pour lister les fascicules selon un autre statuts. Vous devez alors modifier la ligne WHERE serial.STATUS=’3′ et remplacer le 3 par un autre numéro selon la liste suivante:

1 = Attendu
2 = Arrivé
3 = En retard
4 = Manquant
41 = Manquant (jamais reçu)
42 = Manquant (épuisé)
43 = Manquant (endommagé)
44 = Manquant (perdu)
5 = Indisponible
7 = Réclamé

8= Arrêté





























Quote



























SELECT serial.subscriptionid as 'Num abonnement',
aqbooksellers.name as Fournisseur,
serial.biblionumber as 'Num notice',
biblio.title as 'Titre',
serial.serialseq as Numérotation,
serial.planneddate as 'Date prévu publication',
serial.publisheddate as '
Date publication',
serial.STATUS as Statut
FROM serial
LEFT JOIN biblio on (serial.biblionumber = biblio.biblionumber)
LEFT JOIN biblioitems on (serial.biblionumber=biblioitems.biblionumber)
LEFT JOIN subscription on (serial.subscriptionid=subscription.subscriptionid)
LEFT JOIN aqbooksellers on (subscription.aqbooksellerid=aqbooksellers.id)
WHERE serial.STATUS=<<Numéro du statut>>
ORDER BY serial.subscriptionid ASC
limit 10000























































6.2 Liste des abonnements selon les modèles de numérotation





























Quote



























select
biblio.title as Titre,
sn.label as Modèle,
sn.numberingmethod as Description
from subscription s
left join biblio on s.biblionumber=biblio.biblionumber
left join subscription_numberpatterns sn on sn.id=s.numberpattern
limit 10000























































6.3 Liste des abonnements selon les périodicités





























Quote



























select
biblio.title as Titre,
sn.description
from subscription s
left join biblio on s.biblionumber=biblio.biblionumber
left join subscription_frequencies sn on sn.id=s.periodicity
limit 10000























































6.4 Périodiques selon la durée de vie (mis à jour pour 3.22)


























































Quote



























SELECT
    biblio.title AS "Abonnement",
    subscription.subscriptionid AS "No. Abonnement",
    subscription.callnumber as Cote,
    subscription.location AS "Localisation",
    subscription.notes AS "Note abonnement",
subscription.internalnotes as 'Note interne',
v.lib as 'Durée de vie'
FROM
    subscription
    INNER JOIN serial
        ON subscription.subscriptionid = serial.subscriptionid
        INNER JOIN biblioitems
            ON serial.biblionumber = biblioitems.biblionumber
            INNER JOIN biblio
                ON biblioitems.biblionumber = biblio.biblionumber
INNER join additional_field_values d on (d.record_id=subscription.subscriptionid)
INNER join authorised_values v on (d.value=v.authorised_value)
where v.category='lifespan'
group by subscription.subscriptionid
limit 10000



















































































6.5 Liste des abonnés aux périodiques





























Quote



























select
CONCAT('<a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=',s.subscriptionid,'\"target="_blank">',bi.title,'</a>') as 'Consulter abonnement',
s.biblionumber,
cardnumber,
surname,
firstname
from alert
left join borrowers b on b.borrowernumber=alert.borrowernumber
left join subscription s on s.subscriptionid=alert.externalid
left join biblio bi on bi.biblionumber=s.biblionumber
order by bi.title
limit 10000























































7. Administration

7.1 Liste des préférences systèmes





























Quote



























select * from systempreferences limit 1000;























































7.2 Usagers avec permissions





























Quote



























SELECT cardnumber, firstname, surname, categorycode,
description, flags
FROM borrowers
JOIN user_permissions USING (borrowernumber)
JOIN permissions USING (code)
UNION (
SELECT cardnumber, firstname, surname,
categorycode, 'module-level permissions;
1 is superlibrarian' AS description, flags
FROM borrowers
WHERE flags > 0)
ORDER BY cardnumber ASC
limit 10000























































8. OPAC

8.1 Les mots recherchés entre deux dates

Les recherches effectuées à l’opac sont sauvegardées dans la base de données seulement quand l’utilisateur est connecté à son compte. Cette requête vous permet d’afficher les mots recherchés entre deux dates lorsque les utilisateurs sont connectés

Aperçu des résultats






























Quote



























SELECT
search_history.query_desc as Recherche,
search_history.type as 'Type de notice',
search_history.total as 'Nombre résultat',
search_history.time as Date,
borrowers.branchcode as 'Site utilisateur',
borrowers.categorycode as 'Catégorie utilisateur'
FROM search_history
JOIN borrowers ON (search_history.userid=borrowers.borrowernumber)
JOIN branches ON (borrowers.branchcode=branches.branchcode)
WHERE search_history.time BETWEEN <<Entre le|date>> AND <<et le|date>>























































8.2 Les mots les plus recherchés entre deux dates

Les recherches effectuées à l’opac sont sauvegardées dans la base de données seulement quand l’utilisateur est connecté à son compte. Cette requête vous permet d’afficher les mots les plus recherchés entre deux dates lorsque les utilisateurs sont connectés

Aperçu du résultat :






























Quote



























SELECT COUNT(*) AS 'Nombre de fois recherché',
query_desc as Recherche
FROM search_history
WHERE search_history.time BETWEEN <<Entre le|date>> AND <<et le|date>>
GROUP BY query_desc
ORDER BY COUNT(*) DESC
























































8.3 Statistiques de connexion à l'OPAC

Ce rapport permet de ressortir les quantités de connexion à l'OPAC dans une période donnée.  
Info
Pour que ce rapport renvoie des résultats, la préférence système AuthSuccessLog doit être à Journaliser. De plus, ces statistiques permettent uniquement de trouver les connexions manuelles. Les connexions par SSO ne peuvent malheureusement pas être comptabilisées dans Koha.
Quote
SELECT
COUNT(action)
FROM action_logs
WHERE module='auth'
AND action='SUCCESS'
AND interface='opac'
AND (timestamp between <<Date de connexion entre le|date>> and <<et le |date>>)

9. Réservoir de notices

Ce rapport permet de récupérer toutes les notices importées dans votre instance par le Réservoir de notices.
Quote
SELECT
bm.biblionumber,
b.title 'Titre',
ExtractValue(bm.metadata,'//datafield[@tag="590"]/subfield[@code="a"]') as 'Note 590'
FROM biblio_metadata bm
JOIN biblio b USING (biblionumber)
WHERE ExtractValue(metadata,'//datafield[@tag="590"]/subfield[@code="a"]') LIKE "Réservoir de notices Collecto,%"



10. Formation SQL du 23 mai 2023


Formation sur les essentiels à connaitre pour créer une requête SQL dans Koha, les outils, les fonctions les plus couramment utilisées.


    • Related Articles

    • Quelques notions en requêtes SQL

      Dans cet article, je vais essayer de démystifier comment les tables dans la base de données sont imbriquées et comment effectuer des requêtes simples en SQL. Dans la section Bilans et statistiques, vous avez la possibilité d'interroger le contenu de ...
    • Statistiques de renouvellement

      Cette possibilité, c’est de pouvoir connaître le nombre de renouvellements qui sont faits à l’OPAC (et de pouvoir ainsi comparer avec le nombre des renouvellements faits à l’intranet). On peut faire ça avec la préférence système ...
    • Guide de traitement des données dans Moodle

      Contexte Cet article en cours de rédaction et nous souhaitons continuer à l'améliorer, notamment en l'enrichissant avec des captures d'écran. Moodle permet d’offrir aux établissements collégiaux un support numérique pour le contenu de leurs cours, ...
    • Documents de formation

      Voici la liste des documents fournis lors des formations données en 2019 aux nouveaux membres de la communauté Koha-Collecto (Les documents sont en pièces jointes de cette article format PDF) Ces documents sont à jour avec la version 18.05 de Koha. ...
    • Copier/Coller une colonne d’un tableau

      Il existe des extensions dans les navigateurs (Firefox, Chrome) pour copier/coller facilement une colonne ou un tableau en entier. L’extension est particulièrement utile, par exemple, pour copier/coller une colonne ou un tableau entier d'un rapport ...