transformer les données d'une BDD en array ()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : transformer les données d'une BDD en array ()

par DocType » 03 déc. 2006, 22:53

J'avais pas vu LHDN92, on est voisin...je suis sur Asnières :) :)
Lol, effectivement c'est pas loin. J'y passe tous les matins en train ^^

par DaD » 03 déc. 2006, 22:41

J'avais pas vu LHDN92, on est voisin...je suis sur Asnières :) :)

par DaD » 03 déc. 2006, 22:40

Vi, effectivement, mais Xpandmenu ne gère pas trois niveau...
MultiXpandmenu oui, mais j'arrive pas à mettre en forme les données...

Trops petit cerveau le DaD :)

par DocType » 03 déc. 2006, 22:37

3 niveaux = 3 requêtes, suffit de faire une table en plus identique à la supplémentaire :wink:

par DaD » 03 déc. 2006, 22:14

Je suis figé sur rien, avant d'être une bdd, c'était un fichier excel...
mais est ce que ça va pas etre encore plus cho coté dev?
et si je veux pouvoir rajouter des catégorie régulièrement?
N'oublions pas que je débute, et que la moindre ligne de code ne s'écrit pas sans doliprane pour l'instant...ça ira mieux dans qq mois...

En bref, au départ, je voulais faire un menu à 3 niveau, et MultiXpandMenu le fais très bien, mais j'arrive pas à transformer mes données en objet parent ou enfant... Faut dire que je manipule très mal les tableaux, et il faut un $items = array ( toutes le menus et sous menu)...du coup g pas mal galerrer...

Mais le bout de code qui marche et que je vous ai montré, c'est avec l'ancienne version de Xpandmenu, qui ne gérait que 2 niveaux...
Je vais peut etre me contenter de 2 niveaux dans un premier temp, ce qui allègera aussi beaucoups ma BDD et les requetes...

par DocType » 03 déc. 2006, 22:05

utiliser un include avec le menu dans un fichier php serait encore plus judicieux, mais d'après son utilisation il veut pouvoir traiter son menu.

L'option du fichier texte est selon moi recevable, maintenant il faut savoir s'il est figé sur l'idée dune bdd ou si un fichier txt peut lui convenir

par winni » 03 déc. 2006, 22:01

Utiliser un fichier texte bien structuré ne serais pas plus simple ? Mais si nieau programmation s'est plus chaud vu le nombre de catégorie et sous catégorie ca fais beaucoup je pense.

par DocType » 03 déc. 2006, 22:01

De rien :wink:

Et si tu veux un conseil supplémentaire:
structure table principale (id,nom,url)
structure table supplémentaire(id,id_cat,nom,url)

par DaD » 03 déc. 2006, 21:59

Bien, je vais m'y coller....
Merci beaucoups pour ces conseils précieux..
+
DaD

par DocType » 03 déc. 2006, 21:37

Ok, je vois...

Je peux peut etre faire ça sous excel et updater ma base....putain, j'en ai pour des heures :)

Mais si je fais 2 bases, j'aurais autant de requete, pourquoi ça serait moins lourd?
car tu listes d'abord les deux tables une seule et unique fois. Tu vas les mettres an array(), et faudra ensuite juste recouper les résultats:
on liste le array de level 1(table principale)
pour chaque item du level 1, on liste le tablo de level 2 et on ajoute les données seulement si on correspond avec le bon item.

par DaD » 03 déc. 2006, 21:31

Ok, je vois...

Je peux peut etre faire ça sous excel et updater ma base....putain, j'en ai pour des heures :)

Mais si je fais 2 bases, j'aurais autant de requete, pourquoi ça serait moins lourd?

par DocType » 03 déc. 2006, 21:25

si tu as plus d'un milliers de categories, c'est mort...
imagine toi avec environ 60 requêtes sur ta page, si tu as une dizaine de visiteur et que t'es en mutualisé, ça va gueuler chez ton hébegeur.

Ca va te prendre du temps mais selon moi faut reprendre ta base...si tu n'as que categories et sous categories (2 niveaux), je te conseille deux tables liées :wink:

par DaD » 03 déc. 2006, 21:14

Merci à vous 2 pour vos réponses...

LHDN92 pour le coup de mettre dans la base 4;10 pour menu 4 sous menu 10 c'est vrai que ça a l'air mieux, mais dans ce cas c'est la création de ma BDD qui va me prendre un temp fou...y'a plus d'un millier de cat et sous cat confondues...

Pour l'instant j'ai réussit à faire un menu à 2 niveau avec ce code :

Code : Tout sélectionner

////connection à la BDD $connexion = Connexion (NOM, PASSE, BASE, SERVEUR); /// lancement de la requête pour récupérer les catégories avec id parent à 0 $resultat = mysql_query ("SELECT * FROM categorie WHERE cat_level='1'", $connexion); if (!$resultat) { die('Requête invalide : ' . mysql_error()); } while ($items = mysql_fetch_assoc($resultat) ) { ////Si c'est une catégorie de niveau 1, alors on la créer comme parent if ($items['cat_level'] == 1) { $myMenu->addParent($items['cat_nom']); $cat_id=$items['cat_id']; ///on va chercher ses enfants pour les créer aussi $resultat2 = mysql_query (" SELECT * FROM categorie WHERE cat_id_parent=$cat_id ", $connexion); if (!$resultat2) { die('Requête invalide : ' . mysql_error()); } /////tant qu'il reste des enregistrement qui ont l'id_parent qu'on reche, on les crées while ($itemchild = mysql_fetch_assoc($resultat2) ) { ///on créer ses enfants $myMenu->addChild($itemchild['cat_nom'],$itemchild['cat_url']); } } }
ça va être gourmand en ressources?
parceque comme je débute, j'ai vraiment du mal à me balader dans les tab que je créer avec mes requetes...c tendu...

par DocType » 03 déc. 2006, 21:02

Mettre en cache tu veux faire ?
Non, tout simplement faire une requête généraliste "SELECT * FROM tatable" et l'enregistrer dans une variable via mysql_fetch_array()
Une fois cela fait, il suffit de ce balader dans ce nouveau tableau avec le pointeur. Ca te met en "cache" la requête, c'est pas vraiment du cache, mais ca economise des nombreuses ressources :wink:

par winni » 03 déc. 2006, 20:50

Code parfaitement otimisé winni, ça te fait combien de requêtes pour 4 menu, 16 sous menus ? :roll:

Code : Tout sélectionner

while(mysql_fecth_array(...){
pense à fermer tes parenthèses

De plus, vu le gestion generalisée de $id, ça ne fonctionnera pas comme souhaité :wink:
J'ai essayé de résoudre son probléme suivant sa table, maintenant il est vrai qu'il est possible de faire beaucoup mieux. Et il peux utiliser ID1, ID2 maintenant ce n'est en aucun cas la meilleure méthode mais la première qui m'est venu a l'esprit en réponse à sa demande.
Ouep, mais même pour toi pour ta gouverne : ne fais jamais de script comme ça ou alors juste pour faire un update entre deux bases, un truc unique quoi. Cette méthode est plus ou moins correcte, mais très très gourmande et ne peut être developpée pour un site en production :wink:
La solution pour substituer cela serait d'enregistrer la résultat de la requête dans une variable et toujours taffer sur cette dernière :wink:
Mettre en cache tu veux faire ?