MySQL dans TNG
Dans la création de rapport, il est beaucoup plus flexible d'utiliser un requête SQL pour obtenir le résultat désiré. On a besoin d'un minimum de connaissance en base de données et en notion de requête. Je donne ci-bas des exemples de requête qui nous permet d'évaluer la complexité ou simplicité de la chose selon notre état d'esprit.
Documemtations
Un bon document de référence en français en format PDF sur MySQL est disponible à http://www.mysql.com/ et le document est dans http://dev.mysql.com/doc/. Au besoin il est également sur mon site : disponible ici.
J'ai également un
fichier de sauvegarde de rapports offert sur le
Forum TNG comprenant des dizaines de requêtes SQL qui peuvent servir de modèle.
Attention les mots sont en allemand mais le SQL est en anglais.
Aide en ligne de Oracle, déc2021: https://docs.oracle.com/cd/B13789_01/nav/help.htm
Aide mémoire :
Transformer le numéro (i1253) en
chiffre :
RIGHT(p.personID,(LENGTH(p.personID)-1))+0 AS Numéro
Cette ligne permettra de faire des tris par ordre numérique.
En ordre numérique
ORDER BY RIGHT(p.personID,(LENGTH(p.personID)-1))+0
Contient le nom Landry
p.lastname LIKE "%Landry%"
CONCAT (firstname, " ",lastname)
Mettre un commentaire dans le SQL
/* Liste les Landry centenaires, plus de 99 ans.*/
Numéro des familles
tng_families.familyID tng_people.famc
tng_children.familyID
Numéro des personnes
tng_people.personID tng_families.husband
tng_families.wife tng_children.personID
Exemples de requête:
Ces requêtes ont seulement besoin d'être collées dans la case au bas dans la préparation d'un rapport.
En 2017
Permet d'afficher Les Joseph Landry nés au Québec de 1849 à 1853, incluant dates et lieux de naissance, décès et mariages.
Rapport : Joseph 1849-1853 OK
SELECT tng_people.personID, firstname,lastname, birthdate,birthplace,deathdate,deathplace,families1.marrdate,families1.marrplace, families1.wife as spouse,sex, tng_people.gedcom, nameorder FROM (tng_people ) LEFT JOIN tng_families AS families1 ON (tng_people.gedcom = families1.gedcom AND tng_people.personID = families1.husband ) LEFT JOIN tng_families AS families2 ON (tng_people.gedcom = families2.gedcom AND tng_people.personID = families2.wife ) WHERE (firstname LIKE "%Joseph%" AND sex = "M" AND lastname LIKE "%Landry%" AND birthplace LIKE "%QC%" AND ( birthdate LIKE "%1849%" OR birthdate LIKE "%1850%" OR birthdate LIKE "%1851%" OR birthdate LIKE "%1852%" OR birthdate LIKE "%1853%" )) ORDER BY YEAR(birthdatetr), MONTH(birthdatetr), DAY(birthdatetr) |
Rapport: Inscrit et date né dans recensement de 1901
SELECT tng_people.personID, firstname,lastname, birthdate,
e2.eventdate AS DateNéDansRecens,e1.eventdate as DateRecens, e1.eventplace
as LieuRecens, tng_people.gedcom, nameorder FROM (tng_people ) LEFT JOIN
tng_events e1 ON tng_people.personID = e1.persfamID AND tng_people.gedcom =
e1.gedcom AND e1.eventtypeID = "1" LEFT JOIN tng_events e2 ON
tng_people.personID = e2.persfamID AND tng_people.gedcom = e2.gedcom AND
e2.eventtypeID = "19" WHERE (e1.eventdate = "1901" AND tng_people.gedcom =
"05") ORDER BY YEAR(birthdatetr), MONTH(birthdatetr), DAY(birthdatetr) |
_____________________________________________________
Rapport : Liste des lieux où je n'ai pas de latitude ou
longitude pour Google Map.
SELECT place, gedcom, longitude, latitude, notes FROM tng_places WHERE longitude = "" OR latitude="" OR longitude IS NULL OR latitude IS NULL ORDER BY place;
_____________________________________________________
Rapport : Liste numérique des Landry d'Amérique.
Description: Liste toutes les personnes dans mon arbre "05"
par ordre numérique en excluant les vivants.
SELECT YEAR(p.birthdatetr) AS Année, RIGHT(p.personID,(LENGTH(p.personID)-1))+0
AS Numéro, p.lastname, p.firstname, p.birthdate, p.gedcom
FROM tng_people AS p
WHERE p.lastname LIKE "%Landry%" AND p.sex= "M" AND p.gedcom= "05"
ORDER BY Numéro;
_____________________________________________________
Rapport : Classer Landry mâles par année de naissance.
Les personnes dont le nom de famille contient le mot Landry,
mâles, par ordre de naissance.
Si vide, l'ordre utilisé est mariage moins 25
ans, si vide n'est pas inscrit. De plus
de l'information sur les conjoints. mon
arbre est le "05"
SELECT YEAR(p.birthdatetr) AS Année, RIGHT(p.personID,(LENGTH(p.personID)-1))+0
AS Numéro, p.lastname AS nom1, p.firstname AS Prénom1, p.birthdate, f.marrdate,
f.husborder AS No_mariage, p2.firstname AS PrénomConjointe , p2.lastname AS
Conjointe
FROM tng_people AS p
LEFT JOIN tng_families AS f ON p.personID=f.husband
LEFT JOIN tng_people AS p2 ON p2.personID=f.wife
WHERE p.lastname LIKE "%Landry%" AND p.sex= "M" AND YEAR(p.birthdatetr)+1>1 AND
p.gedcom= "05" AND p2.gedcom= "05" AND f.gedcom= "05"
UNION
SELECT YEAR(f.marrdatetr)-25 AS Année, RIGHT(p.personID,(LENGTH(p.personID)-1))+0
AS Numéro, p.lastname as Nom1, p.firstname AS Prenom1, p.birthdate, f.marrdate,
f.husborder AS No_mariage, p2.firstname AS PrénomConjointe , p2.lastname AS
Conjointe
FROM tng_people AS p
LEFT JOIN tng_families AS f ON p.personID=f.husband
LEFT JOIN tng_people AS p2 ON p2.personID=f.wife
WHERE p.lastname LIKE "%Landry%" AND p.sex= "M" AND YEAR(p.birthdatetr)+1<2 AND
p.gedcom= "05" AND YEAR(f.marrdatetr)-25>0 AND p2.gedcom= "05" AND f.gedcom=
"05"
UNION
SELECT YEAR(p.birthdatetr) AS Année, RIGHT(p.personID,(LENGTH(p.personID)-1))+0
AS Numéro, p.lastname AS nom1, p.firstname AS Prénom1, p.birthdate, f.marrdate,
f.husborder AS No_mariage, p2.firstname AS PrénomConjointe , p2.lastname AS
Conjointe
FROM tng_people AS p
LEFT JOIN tng_families AS f ON p.personID=f.husband
LEFT JOIN tng_people AS p2 ON p2.personID=f.wife
WHERE p.lastname LIKE "%Landry%" AND p.sex= "M" AND YEAR(p.birthdatetr)+1>1 AND
p.gedcom= "05" AND f.husborder IS NULL;
ORDER BY Année, Prénom1, Numéro, No_mariage;
_____________________________________________________
Rapport : Nombre de fois que sont utilisés les sources.
SELECT s.sourceID AS Numéro, s.shorttitle AS Abréviation, s.title AS Titre,
s.author AS Auteur, s.publisher AS Éditeur, s.comments AS Commentaires, s.gedcom
AS Arbre, COUNT(*) AS Nombre FROM tng_sources AS s LEFT JOIN tng_citations AS c
ON s.sourceID=c.sourceID GROUP BY s.sourceID ORDER BY RIGHT(s.sourceID,(LENGTH(s.sourceID)-1))+0;
Ce rapport affiche tous les Landry ayant porté le prénom René classés par
année de naissance probable
SELECT YEAR(p.birthdatetr) AS Année, p.personID, p.lastname AS Nom, p.firstname
AS PréNom, p.birthdate, p.deathdate, CONCAT(p3.firstname," / ",p4.firstname,"
",p4.lastname) AS Parents, f.marrdate, f.marrplace, f.husborder AS Mar, CONCAT(p2.firstname,
" ",p2.lastname) AS Conjointe, RIGHT(p.personID,(LENGTH(p.personID)-1))+0 AS Num,
p.gedcom
FROM tng_people AS p
LEFT JOIN tng_families AS f ON p.personID=f.husband
LEFT JOIN tng_people AS p2 ON p2.personID=f.wife
LEFT JOIN tng_families AS f2 ON p.famc=f2.familyID
LEFT JOIN tng_people AS p3 ON p3.personID=f2.husband
LEFT JOIN tng_people AS p4 ON p4.personID=f2.wife
WHERE p.firstname LIKE "%René%" AND p.lastname LIKE "%Landry%" AND p.sex= "M"
AND YEAR(p.birthdatetr)+1>1 AND p.gedcom= "05" AND p2.gedcom= "05" AND f.gedcom=
"05" AND (f2.gedcom="05" OR f2.gedcom IS NULL) AND (p3.gedcom= "05" OR p3.gedcom
IS NULL) AND (p4.gedcom= "05" OR p4.gedcom IS NULL)
UNION
SELECT YEAR(f.marrdatetr)-25 AS Année, p.personID, p.lastname as Nom,
p.firstname AS PreNom, p.birthdate, p.deathdate, CONCAT(p3.firstname," /
",p4.firstname," ",p4.lastname) AS Parents, f.marrdate, f.marrplace, f.husborder
AS Mar, CONCAT(p2.firstname, " ",p2.lastname) AS Conjointe, RIGHT(p.personID,(LENGTH(p.personID)-1))+0
AS Num, p.gedcom
FROM tng_people AS p
LEFT JOIN tng_families AS f ON p.personID=f.husband
LEFT JOIN tng_people AS p2 ON p2.personID=f.wife
LEFT JOIN tng_families AS f2 ON p.famc=f2.familyID
LEFT JOIN tng_people AS p3 ON p3.personID=f2.husband
LEFT JOIN tng_people AS p4 ON p4.personID=f2.wife
WHERE p.firstname LIKE "%René%" AND p.lastname LIKE "%Landry%" AND p.sex= "M"
AND YEAR(p.birthdatetr)+1<2 AND p.gedcom= "05" AND YEAR(f.marrdatetr)-25>0 AND
p2.gedcom= "05" AND (f2.gedcom="05" OR f2.gedcom IS NULL) AND (p3.gedcom= "05"
OR p3.gedcom IS NULL) AND (p4.gedcom= "05" OR p4.gedcom IS NULL)
UNION
SELECT YEAR(p.birthdatetr) AS Année, p.personID, p.lastname AS Nom, p.firstname
AS PréNom, p.birthdate, p.deathdate, CONCAT(p3.firstname," / ",p4.firstname,"
",p4.lastname) AS Parents, f.marrdate, f.marrplace, f.husborder AS Mar, CONCAT(p2.firstname,
" ",p2.lastname) AS Conjointe, RIGHT(p.personID,(LENGTH(p.personID)-1))+0 AS Num,
p.gedcom
FROM tng_people AS p
LEFT JOIN tng_families AS f ON p.personID=f.husband
LEFT JOIN tng_people AS p2 ON p2.personID=f.wife
LEFT JOIN tng_families AS f2 ON p.famc=f2.familyID
LEFT JOIN tng_people AS p3 ON p3.personID=f2.husband
LEFT JOIN tng_people AS p4 ON p4.personID=f2.wife
WHERE p.firstname LIKE "%René%" AND p.lastname LIKE "%Landry%" AND p.sex= "M"
AND YEAR(p.birthdatetr)+1>1 AND p.gedcom= "05" AND (f2.gedcom="05" OR f2.gedcom
IS NULL) AND (p3.gedcom= "05" OR p3.gedcom IS NULL) AND (p4.gedcom= "05" OR
p4.gedcom IS NULL) AND f.husborder IS NULL;
ORDER BY Année, PréNom, Num, Mar;
Requêtes pour visionner les champs d'une
table
tng_events
Select eventID, gedcom, persfamID, eventtypeID, eventdate, eventdatetr,
eventplace, age, agency, cause, addressID, parenttag, info
FROM tng_events
ORDER BY eventtypeID
Pour les codes REFN et OCCU l'information est placée dans le champs info.
Pour RESI c'est dans le champs eventplace.
tng_eventtypes
SELECT eventtypeID, tag, description, display, keep, ordernum, type
FROM tng_eventtypes
ORDER BY eventtypeID
mwl
Au besoin Cliques ici pour m'envoyer un courriel.
Dernière modification : 27 novembre 2021.