Structure DB et récupération de données
Bonjour à tous,
alors voilà je vous expose mon problème, je suis actuellement en train en train d'écrire un petit script qui est sensé récupérer des données dans un array pour les afficher sous forme de tableau et je suis face à 1 gros problème qui a parasité toute mon attention depuis avant-hier soir et qui concerne la structure de la base de donnée qui se présente comme cela actuellement :
Code:
1 2 3 4 5 6 7
| CREATE TABLE `membre` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`type` ENUM( '0', '1' ) NOT NULL ,
`titre` VARCHAR( 255 ) NOT NULL ,
`nom` VARCHAR( 255 ) NOT NULL ,
`prenom` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB; |
sachant que selon le type d'information qui est inséré dans la base certains champs seront vides, par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| INSERT INTO `membre` (
`id` ,
`type` ,
`titre` ,
`nom` ,
`prenom`
)
VALUES (
NULL , '0', '', 'David', 'Dupont'
), (
NULL , '1', 'Seigneur', 'François', 'Damien'
); |
On aura le membre Dupont de type 0 avec aucun titre assigné tandis que l'utilisateur Damien de type 1 aura un titre assigné.
Je veux récupérer toutes les informations contenues dans la base de donnée et les afficher ensuite dans un tableau de ce genre :
Citation:
-------------------------------------------------------------------------
+ Membres (Titre et si Titre vide alors Nom Prénom) | + Contact
-------------------------------------------------------------------------
Seigneur | 4
-------------------------------------------------------------------------
David Dupont | 3
-------------------------------------------------------------------------
Le problème c'est que j'utilise cette requête SQL pour récupérer les informations et les trier:
Code:
"SELECT * FROM membre ORDER BY titre, nom"
et là c'est le drame comme certains champs titres sont vides ils apparaissent en premier sur ma liste alors que je veux qu'ils soient triés par ordre alphabétique décroissant en prenant en compte le champ nom si le champ titre est vide.
Je m'interroge donc s'il ne serait pas mieux de séparer cette table en 2 en créant par exemple une table membre qui enregistrerais tous les membres de type 0 (qui n'ont pas de titre) et une table membre_sup qui enregistrerais tous les membres de type 1 (qui ont un titre) sachant que ma table membre est reliée par le champ id à une table contact qui stocke des contacts et qui prend cette forme:
Code:
1 2 3 4 5 6 7 8
| CREATE TABLE `contact` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`membre_id` INT UNSIGNED NOT NULL ,
`pseudo` VARCHAR( 255 ) NOT NULL ,
`mail` VARCHAR( 255 ) NOT NULL ,
`favori` ENUM( '0', '1' ) NOT NULL ,
INDEX ( `membre_id` )
) ENGINE = InnoDB; |
auriez vous s'il vous plaît une solution ou une indication qui pourrait m'aider à résoudre ce problème sachant que je suis maniaque quant à l'optimisation de mes scripts et que j'affiche ces données en me servant d'un système de template que j'ai écris moi même et qui se fait par une boucle faisant appel à un preg_replace() structuré ainsi : $template = preg_replace( '/{'.$tag.'}/', $array, $template); ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<table>
<tr>
<th>membre</th>
<th>contact</th>
</tr>
<!--START -->
<tr>
<td>{membre.disp}</td>
<td>{membre.contact}</td>
</tr>
<!-- END -->
</table> |