PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 14-06-2010 21:28:48

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Requete sur plusieurs tables par une novice, très novice!

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. On ne peut pas réellement l'utiliser directement sur le site, trop gros dans mon cas. Mais je sais bien qu'il doit être la base même de ce que j'ai besoin.

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

Voici l'image du résultat que je veux avoir :
[img align=c]http://img689.imageshack.us/img689/3588/image1fkf.jpg[/img]

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 ;

Ce que je veux, principalement ça serait de pouvoir faire un include dans ma page d'accueil. J'aimerais qu'on puisse y voir les 10 familles les plus nombreuses ou les familles ayant plus de X enfants.

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.

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!

Ça fait des semaines que je regarde, fouille, mais je n'y comprend pas grand chose, ça me dépasse un peu disons.
Je vous remercie d'avance pour toute aide qui pourrait me faire avancer avec ce bout de code.

Nat

Hors ligne

#2 15-06-2010 12:54:06

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Saluton,
Il nous manque la description de la table `tng_people`, en toute rigueur.
Le reste est assez basique :
La table de référence est la table tng_families qui est en double jointure avec la table tng_people via les colonnes gedcom husband et wife et personid.
Elles est aussi en jointure avec la table tng_children via les colonnes gedcom et familyid.
Il suffit de faire un GOUP BY familyid et COUNT(*) pour récupérer le nombre d'enfants qu'on aliasse en `effectif`
On fait un test sur `effectif`, pour qu'il soit supérieur à X ou bien un ORDER BY `effectif` DESC LIMIT 10


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 15-06-2010 14:42:42

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Bonjour Maljuna Kris

Le reste est assez basique?
Je veux bien te croire! Sauf que comme je l'ai écrit, pour modifier quelques points dans un code, je suis extra mais pour en créer un au complet, c'est une autre histoire!
lol
J'suis plus compétente en histoire régionale qu'en php/mysql disons!

Donc, la table tng_people est ainsi constituée :

CREATE TABLE IF NOT EXISTS `tng_people` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT,
  `gedcom` VARCHAR(20) NOT NULL,
  `personID` VARCHAR(22) NOT NULL,
  `lnprefix` VARCHAR(25) NOT NULL,
  `lastname` VARCHAR(127) NOT NULL,
  `firstname` VARCHAR(127) NOT NULL,
  `birthdate` VARCHAR(50) NOT NULL,
  `birthdatetr` DATE NOT NULL,
  `sex` tinytext NOT NULL,
  `birthplace` text NOT NULL,
  `deathdate` VARCHAR(50) NOT NULL,
  `deathdatetr` DATE NOT NULL,
  `deathplace` text NOT NULL,
  `altbirthdate` VARCHAR(50) NOT NULL,
  `altbirthdatetr` DATE NOT NULL,
  `altbirthplace` text NOT NULL,
  `burialdate` VARCHAR(50) NOT NULL,
  `burialdatetr` DATE NOT NULL,
  `burialplace` text NOT NULL,
  `baptdate` VARCHAR(50) NOT NULL,
  `baptdatetr` DATE NOT NULL,
  `baptplace` text NOT NULL,
  `endldate` VARCHAR(50) NOT NULL,
  `endldatetr` DATE NOT NULL,
  `endlplace` text NOT NULL,
  `changedate` datetime DEFAULT NULL,
  `nickname` text NOT NULL,
  `title` tinytext NOT NULL,
  `prefix` tinytext NOT NULL,
  `suffix` tinytext NOT NULL,
  `nameorder` tinyint(4) NOT NULL,
  `famc` VARCHAR(22) NOT NULL,
  `metaphone` VARCHAR(15) NOT 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 `gedpers` (`gedcom`,`personID`),
  KEY `lastname` (`lastname`,`firstname`),
  KEY `firstname` (`firstname`),
  KEY `gedlast` (`gedcom`,`lastname`,`firstname`),
  KEY `gedfirst` (`gedcom`,`firstname`),
  KEY `birthplace` (`birthplace`(20)),
  KEY `altbirthplace` (`altbirthplace`(20)),
  KEY `deathplace` (`deathplace`(20)),
  KEY `burialplace` (`burialplace`(20)),
  KEY `changedate` (`changedate`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=36371 ;

Ce sont les jointures comme tu dis où je me perd, j'ai lu sur le sujet. Fait des tentatives mais j'n'arrivais à rien. Je refermais le tout, laissais passer une journée ou deux me disant que je finirais par comprendre! Niet! J'n'y arrive pas!

J'étais prête à laisser tomber sauf que plusieurs personnes autour me parle de cette liste qu'ils aimeraient bien voir, donc je m'y remettais, sans succès. Ce week-end, j'ai tenté ma chance afin de trouver de l'aide.....

Hors ligne

#4 15-06-2010 15:28:40

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

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
      HAVING Nombre_enfant > X
      ORDER BY Nombre_enfant DESC LIMIT 10

Si je ne m'abuse ça devrait donner quelque chose comme ça.
Bien entendu  X dans HAVING Nombre_enfant > X doit être remplacer par la valeur choisie, qui peut être passée en paramètre à la requête par PHP.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 15-06-2010 15:46:37

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Ok!
Sauf que....

Te l'ai dit, novice, très novice!

Ce merveilleux code, je le place comment en final?

Entre des balises?
<?php  ?>

Pour l'entête du fichier, je dois faire appel à ma base et tout, ça, je sais.

Mais pour code comme tel?

Merci pour ton aide... enfin, à ce stade, ce n'est plus de l'aide, c'est carrément tout me dire!
Nat

Plusieurs tentatives de faites. Au mieux, ça m'affiche le code dans la page!
lol
Je persiste!

Dernière modification par genhcn (15-06-2010 17:18:53)

Hors ligne

#6 15-06-2010 18:16:50

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Tu utilises quoi ? Les fonctions de mysql ou bien POO pour te connecter à ta base de donnée ?

Hors ligne

#7 15-06-2010 18:23:06

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Comme POO ne me dit absolument rien, te dirais Mysql!
:mdr:
C'est bien ça?
$database_host = "localhost";
$database_name = "nom de la base";
$database_username = "user";
.......

Hors ligne

#8 15-06-2010 19:22:46

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Non ce sont des variables. ^^

Pour mysql tu dois donc utiliser la fonction $ressource = mysql_query($requete);
Mais à la vue de ce que tu connais je te conseillerai d'aller lire les cours du site sur comment faire des requêtes SQL.
Cela ne fait pas énormément en lecture et cela t'aidera bien mieux que de te donner un code tout fait. (surtout vu la facilité du code)

Hors ligne

#9 15-06-2010 20:00:31

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Te remercie mais ça fait un bout que je lis et je ne comprend pas plus.
Je lis présentement sur  $ressource = mysql_query($requete);

Si je comprend, je dois utiliser :
$requete = "SELECT CONCAT('<a .............

Sauf que j'ai toujours un message d'erreur directement dans la première ligne de ce code, donc, j'suis dans le champ! Je n'ai pas la bonne méthode.

Hors ligne

#10 15-06-2010 20:14:46

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Quel est le message d'erreur ?

Hors ligne

#11 15-06-2010 20:20:36

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Parse error: parse error in G:\xampp\htdocs\genealogie\000.php on line 25

la ligne 25 étant

$requete = "SELECT CONCAT ('<a href="familygroup.php?familyID=',f.familyid, '&tree=genhcn">', f.familyid,'</a>') AS familyid,

Hors ligne

#12 15-06-2010 20:29:44

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

J'ai essayé plusieurs choses dans les derniers jours, et c'est toujours là que ça accroche. A moins que ça soit la structure même de la requête?
Sais pas, je pose des questions, m'y connais pas vraiment.

Hors ligne

#13 15-06-2010 20:57:34

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

C'est ce que j'ai en total

<?php

$db = mysql_connect('localhost','user','mdp') or die("Database error");
mysql_select_db('nom-base', $db);


(ligne 12 )$query = "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
HAVING Nombre_enfant > 16
ORDER BY Nombre_enfant DESC LIMIT 10
";


?>

Parse error: parse error in G:\xampp\htdocs\genealogie\000.php on line 12

Dernière modification par genhcn (15-06-2010 20:58:33)

Hors ligne

#14 16-06-2010 06:04:58

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Problème de guillemets dans ta requête. Utilises un logiciel qui fait met de la couleur syntaxique, tu trouverai facilement ce genre d'erreur.


      <?php
       
      $db = mysql_connect('localhost','user','mdp') or die("Database error");
      mysql_select_db('nom-base', $db);

     $query = "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
      HAVING Nombre_enfant > 16
      ORDER BY Nombre_enfant DESC LIMIT 10
      "
;
      ?>
 

Dernière modification par xTG (16-06-2010 06:05:21)

Hors ligne

#15 16-06-2010 12:59:34

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

J'utilise Notepad2 qui met de la couleur.
Mais comme je l'ai déjà écrit, je suis novice, je travaille à l'aveugle plus que d'autre chose pour faire ça, pas mon domaine une minute. Je sais que les couleurs sont importantes...
Donc, une erreur de guillemets?
Je vais chercher.....

Hors ligne

#16 16-06-2010 13:10:54

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

genhcn a écrit :

Je vais chercher.....

il vient de te donner la réponse !!!!


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#17 16-06-2010 13:19:04

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Mais, ça ne fonctionne pas plus!
J'avais essayé les \ hier.
Me donne une page blanche
sad
J'viens de faire un copier/coller intégral, pas mieux

Hors ligne

#18 16-06-2010 13:56:14

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

J'allume!
Si ça me donne une page blanche, c'est que ma requête passe. Je dois donc la faire s'afficher.
Sauf que, ça ce n'est pas fait!
lol
Car habituellement, je n'ai qu'à ramasser le code comme $personid et lui dire où s'afficher. Mais dans ce cas-ci, ce n'est pas la même chose.........
Je repars à la recherche.
Merci pour votre aide...............

Hors ligne

#19 16-06-2010 14:56:26

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Quand tu liras les cours, penses bien au fait que tu cherches à récupérer un tableau de résultats.
Car des fonctions pour récupérer ce qui provient d'une requête il y en a plusieurs, mais toutes ne sont pas bonnes à prendre. wink

Hors ligne

#20 16-06-2010 15:57:20

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

Suis-je sur la bonne voie ou complètement dans le champ?

if($query) {

    echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        echo '<tr>';
        echo '<td><b><u>#</u></b></td>';
        echo '<td><b><u>FamilyName</u></b></td>';
        echo '<td><b><u>Père</u></b></td>';
        echo '<td><b><u>Mère</u></b></td>';
        echo '<td><b><u>nombre</u></b></td>';
      echo '</tr>'."\n";

{
        echo '<tr>';
        echo '<td>'.$count.'</td>';
        echo '<td>'.$row["c.familyid"].'</td>';
      echo '<td>'.$row["w.personid"].'</td>';
        echo '<td>'.$row["h.personid"].'</td>';
      echo '<td>'.$row["Nombre_enfant"].'</td>';
      echo '</tr>'."\n";
    }
    echo '</table>'."\n";

}
else echo 'Pas d\'enregistrements dans cette table...';

Hors ligne

#21 16-06-2010 16:09:01

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

Plutôt dans le champs. ^^
$query est ta requête textuelle, son interprétation se fait via mysql_query() qui va te renvoyer une ressource MySQL.
C'est cette ressource qu'il faut exploiter avec les fonctions de résultat.

Hors ligne

#22 16-06-2010 16:12:12

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

ouf!
Je recommence
mdr

Hors ligne

#23 16-06-2010 16:30:31

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

MED_Yeah.gif

$result = mysql_query($query);

if (!$result) {
    $message  = 'Requête invalide : ' . mysql_error() . "\n";
    $message .= 'Requête complète : ' . $query;
    die($message);
}

while ($row = mysql_fetch_assoc($result)) {
   echo '<table width="80%">'."\n";
   echo '<td>';
   echo $row['familyid'];
   echo '</td>';
   echo '<td>';
   echo $row['Nombre_enfant'];
   echo '</td>';
   echo '<td>';
   echo $row['Père'];
   echo '</td>';
   echo '<td>';
   echo $row['Mère'];
   echo '</td>';
   echo '</table>'."\n";
}

Vous m'avez fait forcer les boys!
Quoi que... vous n'aviez pas tort... sauf que j'avais besoin de vrrrraiment beaucoup d'aide pour ce code.

Ma question maintenant, mon code est-il "propre"?
C'est à dire, qu'il ne demande pas trop à ma base?
Le voici en entier, sans la mise en page.

<?php
// requête SQL qui compte le nombre total d'enregistrement dans la table et qui
//récupère tous les enregistrements
$query = "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
HAVING Nombre_enfant > 15
ORDER BY Nombre_enfant DESC LIMIT 10"
;

// Exécution de la requête
$result = mysql_query($query);

if (!$result) {
    $message  = 'Requête invalide : ' . mysql_error() . "\n";
    $message .= 'Requête complète : ' . $query;
    die($message);
}

while ($row = mysql_fetch_assoc($result)) {
   echo '<table width="80%">'."\n";
   echo '<td>';
   echo $row['familyid'];
   echo '</td>';
   echo '<td>';
   echo $row['Nombre_enfant'];
   echo '</td>';
   echo '<td>';
   echo $row['Père'];
   echo '</td>';
   echo '<td>';
   echo $row['Mère'];
   echo '</td>';
   echo '</table>'."\n";
}
?>

Dernière modification par genhcn (16-06-2010 16:35:40)

Hors ligne

#24 16-06-2010 16:40:31

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Requete sur plusieurs tables par une novice, très novice!

bah, c'est une de mes habitudes mais ton pavé de echo ' '; successif peut s'abréger par un petit appel à la concaténation :


while ($row = mysql_fetch_assoc($result)) {
   echo '<table width="80%">'."\n";
   echo '<td>'.$row['familyid'].'</td>';
   echo '<td>'.$row['Nombre_enfant'].'</td>';
   echo '<td>'.$row['Père'].'</td>';
   echo '<td>'.$row['Mère'].'</td>';
   echo '</table>'."\n";
}

voir même tout passer par le même echo '' ... mais après, on dit de moi que c'est maladif big_smile


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#25 16-06-2010 17:03:31

genhcn
Membre
Inscription : 14-06-2010
Messages : 17

Re : Requete sur plusieurs tables par une novice, très novice!

J'avais vu mais j'savais pas comment m'y prendre!
lol
Trouvais qu'y en avait beaucoup moi aussi!

Mon problème est toujours de faire un entête, j'réussis mais tout meurt après la première ligne, le reste est hors du tableau..... je travaille, je travaille..........

Hors ligne

Pied de page des forums