JeuWeb - Crée ton jeu par navigateur
optimisation de mon futur tutorial - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : optimisation de mon futur tutorial (/showthread.php?tid=837)

Pages : 1 2 3


optimisation de mon futur tutorial - X-ZoD - 20-02-2007

Informations relatives
Auteur : X-ZoD
Date de création : 19/02/2007
Derniere mise à jour : --/--/----

Description
Il s'agit d'un tutorial qui permet de creer une arborescence quelconque [du contenu d'un repertoir ou des dependance de certains enregistrements dans une base de donnee(comme pour un forum et ses categorie)].

Exemple
un exemple est disponible a cette adresse
http://help.hd-serv.org/tutoriaux_arborescence.php

PS
Ce code n'a rien de dur en soit mais peut servir dans les cas suivant a mon avis:
- plan d'un site
- ordonner les regles relative a un jeu
- classer des informations[pour une raison quelconque ^^]


Le code

Code PHP :
<?php 
function fils($id,$nom)
{
// on compte le nombre de sous categories concernes par cette sous categorie
$sql_nb_act = mysql_query("select id from tutoriaux_arborescence where id_parent = ".$id)or die(mysql_error());
$nb_act = mysql_num_rows($sql_nb_act);

// si il y a encore des sous categorie on repart en boucle
if($nb_act>0){
$return = '<table cellspacing=0 cellpadding=0>';
$return .= '<tr><td><img src=images/_.gif></td><td valign=top>'.$nom.'</td></tr>';

// on recupere toutes les info juskq l'avant derniere car a ce moment limage changera
$sql2 = mysql_query("select * from tutoriaux_arborescence where id_parent = ".$id." limit ".($nb_act-1))or die(mysql_error());

while(
$data2 = mysql_fetch_array($sql2)){
$return .= '<tr><td background=images/I.gif valign=top><img src=images/T.gif></td><td valign=top>';
$return .= fils($data2['id'],$data2['nom']);
$return .= '</td></tr>';
}


// on recupere la derniere et on affiche limage d'angle droit
$sql2 = mysql_query("select * from tutoriaux_arborescence where id_parent = ".$id." order by id DESC limit 1")or die(mysql_error());

while(
$data2 = mysql_fetch_array($sql2)){
$return .= '<tr><td valign=top><img src=images/L.gif></td><td valign=top>';
$return .= fils($data2['id'],$data2['nom']);
$return .= '</td></tr>';
}

$return .= '</table>';
//sinon on affiche tout simplement le nom
}else{
$return = $nom;
}
return
$return;
}


***
conexion a la bdd ***

echo
fils(0,"Informations concernant les personnages");

mysql_close();
====================================================

voila en gros ...
je demande votre aide car je sais que ce script peut etre optimisé.
- d'une part passer les tableaux en div [je m'y connait pas assez et j'en profiterais pour apprendre]
- d'autre part dans le cas ou vous auriez des solutions interessante poru ameliorer le script


RE: optimisation de mon futur tutorial - Sephi-Chan - 20-02-2007

Prems'!


RE: optimisation de mon futur tutorial - Antyoz - 20-02-2007

J'ai rien compris hein !! mais bravo.


RE: optimisation de mon futur tutorial - X-ZoD - 20-02-2007

lol
moi oqui pensait etre claire -_-


RE: optimisation de mon futur tutorial - Antyoz - 20-02-2007

Lol non c'est moi, je pige rien au php !!


RE: optimisation de mon futur tutorial - Seren - 20-02-2007

Je suis pas convaincu qu'une partie statique comme les règles par exemple doivent être stocker dans une table.

Autant utiliser un fichier statique, ça sera moins lourd pour récupérer les infos.

Par contre, ton script me donne des supers idées pour par exemple afficher la liste des joueurs par factions.
Ou meme par ordre alphabétique en utilisant A,B,C... comme noeuds.

Ou la liste des bâtiments ou véhicule.

Avec une pointe de javascript pour ouvrir et fermer les ongles ça peut faire un pur truc.

Super idée !

PS : Ah oui par contre j'avais pas vu les requêtes dans le truc récursif c'est un peu sale à mon avis Smile. 30 requêtes pour afficher 30 items c'est pas du tout efficace.


RE: optimisation de mon futur tutorial - X-ZoD - 20-02-2007

d'ou la demande d'aide pour optimisation -_-


RE: optimisation de mon futur tutorial - Sephi-Chan - 20-02-2007

Les jointures ! Smile

Voila un exemple de sélection de données massive avec un affichage "contrôlé".
Avant j'aurais fais la même chose que toi.
Code PHP :
<?php 
if(!empty($_SESSION['idCompte'])){ // Si le joueur est loggué : Début.
echo '<div id="informations">';
$requete1 = sprintf("
SELECT u.id, u.nomDeCompte, p.*, c.nomCarriere, v.*, l.*
FROM utilisateurs u
LEFT JOIN personnages p ON p.idUtilisateur = u.id
LEFT JOIN carrieres c ON c.idCarriere = p.carrierePersonnage
LEFT JOIN villes v ON v.idVille = p.localisationVille
LEFT JOIN lieux l ON l.idLieu = v.idLieu
WHERE u.id = %d"
,
securiser($_SESSION['idCompte'])
);
$retourRequete1 = mysql_query($requete1) or die(mysql_error());
if(
mysql_affected_rows()){
$i = NULL;
while(
$arrayRequete1 = mysql_fetch_assoc($retourRequete1)){

if(
$i != $arrayRequete1['id']){
$i = $arrayRequete1['id'];
echo
'<h3>Compte : ',$arrayRequete1['nomDeCompte'],'</h3>';
echo
'<p>Liste des profils</p>';
echo
'<ul>';
}
if(
$arrayRequete1['idPersonnage']){
echo
'<li>';
echo
'<a href="index.php?p=choisirProfil&idProfil=',$arrayRequete1['idPersonnage'],'">',$arrayRequete1['prenomPersonnage'],' ',$arrayRequete1['nomPersonnage'],'</a>';
if(!empty(
$_SESSION['idProfil'])) if($arrayRequete1['idPersonnage'] == $_SESSION['idProfil']) echo ' (actuel)';
echo
'</li>';
}

if(!empty(
$_SESSION['idProfil'])) if($_SESSION['idProfil'] == $arrayRequete1['idPersonnage']){
// Si le joueur a connecté un personnage : Début.
echo '<h3>Personnage : ',$arrayRequete1['prenomPersonnage'],' ',$arrayRequete1['nomPersonnage'],'</h3>';
echo
'<p>Vous êtes ',$arrayRequete1['nomCarriere'],' et évoluez dans la ville de ',$arrayRequete1['nomVille'],'.</p>';

}
// Si le joueur a connecté un personnage : Fin.

} // Fin du WHILE
echo '<br /><li><a href="index.php?p=creerProfil">Créer un personnage</a></li>';
echo
'</ul>';
}
echo
'</div>';
}
// Si le joueur est loggué : Fin.

Si ça ne suffit pas (ce que je comprendrais), j'appliquerai ça à ton tutorial, en convertissant ça en CSS. Le toute dès que j'aurais un peu de temps (en début d'après midi je pense).


Sephi-Chan


RE: optimisation de mon futur tutorial - Sephi-Chan - 20-02-2007

Voilà où j'en suis actuellement avec une seule requête !

[Image: arborescencekt9.th.png]


Code PHP :
<?php
mysql_connect
('localhost', 'root', '');
mysql_select_db('test');

/* Conventions d'écriture :
$sql est une requête
$rsql est l'execution de la requête
$asql est l'array de la requête
l => L minuscule

$i est un indice
*/

function fils($iparent, $snom){
echo
'<h3>',$snom,"</h3>\n";
$sql = sprintf("SELECT T. * , T2.id AS T2_id, T2.nom AS T2_nom, T2.id_parent AS T2_id_parent
FROM tutoriaux_arborescence T
JOIN tutoriaux_arborescence T2 ON T2.id_parent = T.id"
);
//echo $sql;
$rsql = mysql_query($sql) or die(mysql_error());

$i = NULL;

echo
"<ul>\n";

while(
$asql = mysql_fetch_assoc($rsql)){
// On part de l'élément parent donné en argument.
if($iparent == $asql['id_parent']){

if(
$i != $asql['id']){
$i = $asql['id'];
echo
"\t<li>",$asql['id'],". ",$asql['nom'];

}
if(
$asql['T2_id_parent'] == $asql['id']){
echo
"<ul>";
echo
"<li>",$asql['T2_id'],". ",$asql['T2_nom'],"</li>\n";
echo
"</ul>";
}
echo
"</li>\n";

}

}

echo
'</ul>';
}

echo
fils(0, 'Informations concernant les personnages');

?>

Encore un peu de boulot Smile.
Il faudra aussi que j'empêche d'ouvrir une liste pour chaque élément de liste lors du listing.


Sephi-Chan


RE: optimisation de mon futur tutorial - Roworll - 21-02-2007