table MySQL dans tableau (à 2 dimensions?)

table MySQL dans tableau (à 2 dimensions?) - PHP - Programmation

Marsh Posté le 18-08-2005 à 14:46:49    

Bonjour à tous,
 
J'ai une table MySQL dont la structure est la suivante:

id, chaine1, nombre1, chaine2, nombre2, ... , chaine20, nombre20


Et je voudrais mettre le contenu de cette table dans un tableau pour pouvoir travailler dessus plus tard.
 
Je suppose que la meilleure solution est de mettre tout ça dans un tableau à 2 dimensions, où
* la 1ère clé est un chiffre (l'id)
* la 2ème clé est associative
 
Ainsi je devrais pouvoir récupérer les valeurs dans le tableau suivant:

$tableau[0][id]       <-- (*)
$tableau[0][chaine1]
$tableau[0][nombre1]
$tableau[0][chaine2]
$tableau[0][nombre2]
...
$tableau[0][chaine20]
$tableau[0][nombre20]
|
|
|
$tableau[n][id]       <-- (*)
$tableau[n][chaine1]
$tableau[n][nombre1]
$tableau[n][chaine2]
$tableau[n][nombre2]
...
$tableau[n][chaine20]
$tableau[n][nombre20]


 
Note (*): cette ligne n'est pas indispensable puisque la première clé est égale à l'id, mais si c'est plus facile de faire comme ça, c'est pas grave...
 
(j'espère que tout ça est compréhensible)
 
 
 
==> Mon seul problème, c'est que je ne sais pas comment coder ça simplement en PHP. J'ai bien des idées, mais c'est proche de l'usine à gaz, avec plein de lignes de codes.
 
Je suis sur qu'il y a un moyen simple de faire ça.
Est-ce vous avez des idées pour m'aider???

Reply

Marsh Posté le 18-08-2005 à 14:46:49   

Reply

Marsh Posté le 18-08-2005 à 16:04:33    

Le schéma de la db lui-même est une usine à gaz, ce qui rend ta question plus difficile qu'elle ne devrait l'être (une parfaite illustration d'un cas où on crée un table a priori simple mais qui implique des traitements compliqués :))
 
Pourquoi ne pas avoir concu la table sous la forme

Code :
  1. id, ref, ordre, chaine, nombre


 
où id serait une clé unique, ref une clé étrangère (ou une référence commune au 20 binômes chaine/nombre) et ordre l'ordre dans le cas où il aurait de l'importance ?

Reply

Marsh Posté le 19-08-2005 à 08:38:29    

Merci naceroth de ta réponse.
 
Je crois en effet que je vais revoir l'organisation de ma BDD.
Pour être honnête, je n'ai pas tout saisi ce que tu me recommande, mais je vais essayer de largement simplifier mon truc.
 
Bonne journée.

Reply

Marsh Posté le 19-08-2005 à 08:56:23    

mysql_fetch_array() te crais un tableau contenant une ligne de résultat que tu peux placer dans une case d'un autre tableau si tu veux.
Il y a le même genre de fonctions pour quasiment toutes les bases de données que php reconais si ce n'est toute.
En PDO php5.1 et supérieur) il y a la fonction fetchAll de l'objet PDOStatement (objet contenant le résultat com^plet de la requête) qsui permet d'obtenir directement un tableau à deux dimensions.
 
Sinon, quand on cré une base de donnée, pour savoir s'il faut utiliser une seule table ou plusieurs il faut regarder combien d'élément d'un type donné est relié à un élément donné d'un autre type.
Là, t'as plusieurs couples "chaine,nombre" pour un id donné.
par conséquent, t'auras besoin d'une table contenant l'id (numérique pour des raisons de rapidité) et les autres éléments (mais sans les couples "chaine,nombre" ) et une table contenant l'id , un couple "chaine,nombre" et éventuellement une colone numérique permettant de trier les couples.

Reply

Marsh Posté le 19-08-2005 à 15:35:12    

Mploufeur a écrit :

Merci naceroth de ta réponse.
 
Je crois en effet que je vais revoir l'organisation de ma BDD.
Pour être honnête, je n'ai pas tout saisi ce que tu me recommande, mais je vais essayer de largement simplifier mon truc.
 
Bonne journée.


 
Il te preconise
 

Code :
  1. id       ref      num      chaine         Nombre
  2. 1        1        1        xxxxxx         xxxxxx
  3. 2        1        2        yyyyyy         yyyyyy
  4. 3        1        3        zzzzzz         zzzzzz
  5. .
  6. .


 
La ligne 3 represente ton couple chaine3 nombre3 que tu connais grace a "num=3" et la "ref=1" etant le numero permetant de regrouper le premier groupe de nombre et de chaine.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed