Requetes avec concat

Petit nouveau ! | 4 Messages

11 juin 2010, 19:46

Bonjour

Je suis très novice en php/Mysql, je me débrouille un peu pour changer certaines choses par essais/erreurS mais je ne suis pas compétente au point de pouvoir écrire moi-même des codes qui pourraient s'exécuter.

J'utilise un script, très bien fait, pour une énorme base de données généalogiques. Le script est TNG (http://lythgoes.net/genealogy/software.php) et mon site est ici :
http://www.genhcn.net/genealogie

Voici mon problème. Avec ce script, on peut générer des "reports", un de ces "reports" est de pouvoir classer les familles, des plus nombreuses aux moins nombreuses, à l'aide de ce script dans l'espace administration. J'étais un peu familière avec le php avant la v.4, imaginez où j'en suis avec la version 5, complètement perdue. Première fois que je voyais l'expression "concat", donc, je suis loin d'être une pro.

Code : Tout sélectionner

SELECT concat('<a href="familygroup.php?familyID=',f.familyid, 'genhcn', f.gedcom,'">', f.familyid,'</a>') as familyid, concat('<a href="familygroup.php?familyID=',f.familyid, 'genhcn', f.gedcom,'">', if(isnull(h.lastname), ' ',h.lastname),'/ ', if(isnull(w.lastname), ' ',w.lastname),'</a>') as FamilyName, count(c.personid) as Size, group_concat(ch.firstname order by ordernum separator '- ') as Children, concat('<a href="getperson.php?personID=',f.husband,'genhcn', f.gedcom,'">',h.firstname,' ',h.lastname,'</a>') as Père, concat('<a href="getperson.php?personID=',f.wife,'genhcn', f.gedcom,'">',w.firstname,' ',w.lastname,'</a>') as Mère, f.marrdate, f.marrplace, f.branch as Branch FROM tng_families as f left join tng_people as h on f.gedcom = h.gedcom and f.husband = h.personid left join tng_people as w on f.gedcom=w.gedcom and f.wife = w.personid left join tng_children as c on f.gedcom=c.gedcom and f.familyid = c.familyid left join tng_people as ch on f.gedcom=ch.gedcom and c.personid = ch.personid WHERE f.gedcom = 'genhcn' group by c.gedcom,c.familyid order by Size desc, h.lastname,w.lastname,h.firstname, w.firstname

Cela nous génére une page, côté administratif. Ce que j'aimerais, ça serait avoir ce script afin d'en faire un include sur ma page d'accueil mais seulement les 10 familles les plus nombreuses ou encore, les familles ayant plus de 17 enfants par exemple.
Voici un exemple de la page généré par le "report", en jaune, ce que j'aimerais conserver.

Image


Ci-joint, la structure des deux tables probablement concernées par ce code, enfin, j'espère que je n'en oublie pas.
CREATE TABLE IF NOT EXISTS `tng_families` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `gedcom` varchar(20) NOT NULL,
  `familyID` varchar(22) NOT NULL,
  `husband` varchar(22) NOT NULL,
  `wife` varchar(22) NOT NULL,
  `marrdate` varchar(50) NOT NULL,
  `marrdatetr` date NOT NULL,
  `marrplace` text NOT NULL,
  `marrtype` varchar(50) NOT NULL,
  `divdate` varchar(50) NOT NULL,
  `divdatetr` date NOT NULL,
  `divplace` text NOT NULL,
  `status` varchar(20) NOT NULL,
  `sealdate` varchar(50) NOT NULL,
  `sealdatetr` date NOT NULL,
  `sealplace` text NOT NULL,
  `husborder` tinyint(4) NOT NULL,
  `wifeorder` tinyint(4) NOT NULL,
  `changedate` datetime DEFAULT NULL,
  `living` tinyint(4) NOT NULL,
  `private` tinyint(4) NOT NULL,
  `branch` varchar(100) NOT NULL,
  `changedby` varchar(20) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `familyID` (`gedcom`,`familyID`),
  KEY `husband` (`gedcom`,`husband`),
  KEY `wife` (`gedcom`,`wife`),
  KEY `changedate` (`changedate`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14774 ;



CREATE TABLE IF NOT EXISTS `tng_children` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `gedcom` varchar(20) NOT NULL,
  `familyID` varchar(22) NOT NULL,
  `personID` varchar(22) NOT NULL,
  `frel` varchar(20) NOT NULL,
  `mrel` varchar(20) NOT NULL,
  `sealdate` varchar(50) NOT NULL,
  `sealdatetr` date NOT NULL,
  `sealplace` text NOT NULL,
  `haskids` tinyint(4) NOT NULL,
  `ordernum` smallint(6) NOT NULL,
  `parentorder` tinyint(4) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `familyID` (`gedcom`,`familyID`,`personID`),
  KEY `personID` (`gedcom`,`personID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=31063 ;


Une âme charitable pour m'aider avec ce fichu code?
Du moins, des indices comment l'utiliser. J'ai fouillé mais je n'y comprend strictement rien.

Merci!

Petit nouveau ! | 4 Messages

11 juin 2010, 19:49

Dernière précision.
Si je suis ici, c'est que le seul forum existant pour ce script est anglophone. Donc, pour une novice en php, c'est un lourd handicap!
:lol:

Petit nouveau ! | 4 Messages

11 juin 2010, 23:55

J'suis parvenue à ne faire afficher que ce que je voulais dans les colones
Sauf la limite, je ne sais pas ou le placer
:(
Comme je ne trouve pas comment le convertir en query ou quelque chose dans le genre...
SELECT concat('<a href="familygroup.php?familyID=',f.familyid, '&tree=genhcn">', f.familyid,'</a>') as familyid, 

concat('<a href="familygroup.php?familyID=',f.familyid, '&tree=genhcn">', if(isnull(h.lastname), ' ',h.lastname),'/ ',
if(isnull(w.lastname), ' ',w.lastname),'</a>') as FamilyName, count(c.personid) as Nombre_enfant, 


concat('<a href="getperson.php?personID=',f.husband, '&tree=genhcn">',h.firstname,' ',h.lastname,'</a>') as Père,  

concat('<a href="getperson.php?personID=',f.wife,'&tree=genhcn">',w.firstname,' ',w.lastname,'</a>') as Mère

FROM tng_families as f 
left join tng_people as h on f.gedcom = h.gedcom and f.husband = h.personid 
left join tng_people as w on f.gedcom=w.gedcom and f.wife = w.personid 
left join tng_children as c on f.gedcom=c.gedcom and f.familyid = c.familyid 
WHERE f.gedcom = 'genhcn' 
group by c.gedcom,c.familyid 
order by Nombre_enfant desc 

Petit nouveau ! | 4 Messages

14 juin 2010, 17:44

Aucune âme charitable pour me donner une piste à savoir comment utiliser ce code?
SELECT concat('<a href="familygroup.php?familyID=',f.familyid, '&tree=genhcn">', f.familyid,'</a>') as familyid, 

concat('<a href="familygroup.php?familyID=',f.familyid, '&tree=genhcn">', if(isnull(h.lastname), ' ',h.lastname),'/ ',
if(isnull(w.lastname), ' ',w.lastname),'</a>') as FamilyName, count(c.personid) as Nombre_enfant, 


concat('<a href="getperson.php?personID=',f.husband, '&tree=genhcn">',h.firstname,' ',h.lastname,'</a>') as Père,  

concat('<a href="getperson.php?personID=',f.wife,'&tree=genhcn">',w.firstname,' ',w.lastname,'</a>') as Mère

FROM tng_families as f 
left join tng_people as h on f.gedcom = h.gedcom and f.husband = h.personid 
left join tng_people as w on f.gedcom=w.gedcom and f.wife = w.personid 
left join tng_children as c on f.gedcom=c.gedcom and f.familyid = c.familyid 
WHERE f.gedcom = 'genhcn' 
group by c.gedcom,c.familyid 
order by Nombre_enfant desc 
#-o