PHP|Débutant :: Forums

Advertisement

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

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

#1 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

Et voilà!

Ce que je voulais depuis si longtemps sur mon site est apparu en ligne!
page d'accueil de mon site

Encore de gros merciS pour votre aide!
Nat

#2 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

Mon tableau, je l'avais réussi depuis un moment!
sad

J'actualisais la mauvaise page!
Quand tout s'en mêle, tout s'en mêle!

Mon résultat!

yesjh.jpg

Ne me reste qu'à peaufiner le résultat et faire un include.

Je vous remercie beaucoup de votre PATIENCE, de votre SCIENCE et de votre AMABILITÉ.

Sauf que.... je vais continuer de prendre des scripts tout faits!
big_smile
J'suis historienne et non pas programmeuse, je viens d'en avoir la preuve!

Encore merci!
Nat

#3 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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..........

#4 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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";
}
?>

#6 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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...';

#7 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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...............

#8 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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

#9 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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.....

#10 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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

#11 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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.

#12 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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,

#13 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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.

#14 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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";
.......

#15 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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!

#16 Re : MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

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.....

#17 MySQL, PostgreSQL, etc... » Requete sur plusieurs tables par une novice, très novice! » 17-06-2010 15:34:40

genhcn
Réponses : 26

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

Pied de page des forums

Propulsé par FluxBB