[SQL] Menu à plusieurs niveaux, afficher les non vides

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 nov. 2011, 06:20

La y a pas solution miracle je pense, soit tu fait un produit cartésien de ce que tu as avec la table domaine (donc n fois les meme infos par domaine, c'est dire que tu répète les infos d'un "works" autant de fois que tu a de domaine sur ce "works")
Soit dans le traitement tu envoi une requête par "works" pour récupérer les domaines associés.

Je ne sais pas quel est le plus performant, dans le cas du tout en un il faut réalisée une césure sur le nom du "works".
Dans le second tu peux utiliser une requête préparée (voir utiliser une "vrai" requête préparée) histoire d'être un peux plus performant sachan que seul le paramètre du documents change, la jointure est simple sur une seule table.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 82 Messages

16 nov. 2011, 14:30

Merci pour ta réponse.

Pour ce qui est de ta deuxième proposition, je vois comment faire. Cependant, pour ensuite afficher le travail dans ma page de recherche par domaine, ça devient impossible non?

Dans le tableau qui est sur cette page: http://www.collaide.com/travaux/p1-list ... aines.html , j'affiche le domaine du travail... Je ne vois pas trop comment faire si les travaux commence a avoir plusieurs domaines. Et je pense que ça sera encore moins bien organisé si un travail se situait 3 fois dans science naturel (une fois pour bio, une foi pour chimie et une fois pour math, par exemple)..

Sinon, ce que je pourrais faire, c'est que dans la table lien, je rajoute un champs dom_princ et si cette valeur vaux 1, c'est que le domaine en question est le domaine principal du travail et c'est donc lui qui est pris en compte dans mes pages de recherche de travaux par domaine?

Les domaines secondaires seront utile dans la page information du travail (pour voir tous les domaines que le travail touche) et dans un futur module de recherche..

Comme ça je ne casse pas tout le boulot deja fourni et je garde le "1 domaine par travail".

Par contre, pour modifier ma requete et y instauré le domaine principal, je ne vois pas comment faire. Je ne peux pas faire une simple liaison, car il y a une 3eme table qui rentre en compte.

Comment est-ce que je pourrais par exemple modifier cette requête?
// Récupérer tous les travaux     
    			$page_works = $bdd->prepare('SELECT work_id, work_name, work_desc, doc_format, work_type, work_acces, work_rs, dom_name, dom_id FROM tab_works 
				INNER JOIN domains
				ON work_domain = dom_id WHERE work_acces=0 AND work_status = 1 AND work_statusM = 1 AND work_domain = dom_id AND dom_gauche >= :dom_gauche
   AND dom_droite <= :dom_droite ORDER BY work_id DESC LIMIT :premier, :nombre'); 
   				$page_works->bindValue(':dom_gauche', $dom_gauche, PDO::PARAM_INT);
				$page_works->bindValue(':dom_droite', $dom_droite, PDO::PARAM_INT);
				$page_works->bindValue(':premier', $premierMessageAafficher, PDO::PARAM_INT);
				$page_works->bindValue(':nombre', $nombreDeMessagesParPage, PDO::PARAM_INT);
				$page_works->execute();
Merci beaucoup

Eléphant du PHP | 82 Messages

22 nov. 2011, 16:31

up :)