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 :
sachant que selon le type d'information qui est inséré dans la base certains champs seront vides, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
On aura le membre Dupont de type 0 avec aucun titre assigné tandis que l'utilisateur Damien de type 1 aura un titre assigné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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' );
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 :
Le problème c'est que j'utilise cette requête SQL pour récupérer les informations et les trier:-------------------------------------------------------------------------
+ Membres (Titre et si Titre vide alors Nom Prénom) | + Contact
-------------------------------------------------------------------------
Seigneur | 4
-------------------------------------------------------------------------
David Dupont | 3
-------------------------------------------------------------------------
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "SELECT * FROM membre ORDER BY titre, nom"
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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Partager