8795 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je créé un dictionnaire simple en apparence, mais qui me pose quelques problèmes. Je souhaite mettre des liens "voir aussi" qui sont des ancres entre les articles.

La base ressemble pour afficher les articles à ceci :
if (mysql_num_rows($requetelettre) > 0) {
				if (mysql_num_rows($requetelettre) == 1) {echo '<p>'.mysql_num_rows($requetelettre).' entrée trouvée.</p>';} 
				else {echo '<p>'.mysql_num_rows($requetelettre).' entrées trouvées.</p>';}
				
				$requetepremier = mysql_query("SELECT * FROM entrees WHERE entree_nom LIKE '".$lettre."%'");
				$lignepremier = mysql_fetch_assoc($requetepremier);
				
				$requetedernier = mysql_query("SELECT entree_nom FROM entrees WHERE entree_nom LIKE '".$lettre."%' ORDER BY entree_nom DESC LIMIT 0,1");
				$lignedernier = mysql_fetch_assoc($requetedernier);

				echo '<h3>De '.utf8_encode($lignepremier["entree_nom"]).' à '.utf8_encode($lignedernier["entree_nom"]).'</h3>';
					 
				while ($donneeslettres = mysql_fetch_array($requetelettre))
				{		
						$ancre = nettoyage($donneeslettres['entree_nom']);
			
						echo '<a name="'.$ancre.'" id="'.$ancre.'"></a>';
						echo '<p><strong>'.utf8_encode($donneeslettres['entree_nom']).'</strong> ';
						echo '<span class="discipline">'.utf8_encode($donneeslettres['entree_discipline']).' &bull; '.utf8_encode($donneeslettres['entree_type']).' &bull; </span> '.utf8_encode($donneeslettres['entree_definition']).'</p>';
						
						$requeterelations = mysql_query("SELECT entrees.entree_id, entrees.entree_nom, entrees_relations.entree_id, entrees_relations.relation_id FROM entrees INNER JOIN entrees_relations ON entrees.entree_id = entrees_relations.entree_id WHERE entrees.entree_id = entrees_relations.entree_id ORDER BY entrees.entree_nom DESC"); 			
						
						if (mysql_num_rows($requeterelations) > 0) {
							echo '<p class="seealso"><span>&rarr;</span> Voir aussi :';
							while ($donneesrelations = mysql_fetch_array($requeterelations))
							{
								$ancre = nettoyage($donneesrelations['entree_nom']);
								if ($donneesrelations['relation_id'] > 0) {
									if (mysql_num_rows($requeterelations) == 1) 
										{echo ' <a href="#'.$ancre.'" title="Voir aussi '.$ancre.'">'.utf8_encode($donneesrelations['entree_nom']).'</a>.';}
									else 
										{echo ' <a href="#'.$ancre.'" title="Voir aussi '.$ancre.'">'.utf8_encode($donneesrelations['entree_nom']).'</a>, ';}
								}
							}		
							echo '</p>';	
						}
				
				}
			} else { echo '<p>Aucune entrée du dictionnaire n\'a été trouvée.</p>';	}
			echo '</div>';


Dans ma table entrees j'ai un article entree_id=5 et un autre entree_id=7
J'ai une seconde table de "relations" (entrees_relations) ou je renseigne :
entree_id=5 > relation_id=7
entree_id=7 > relation_id=5

Pour préciser ma pensée : en fait je dois faire un lien entre deux entrées d'une même table (étant donné que la structure des données et la même), en utilisant une deuxième table externe, qui ne se réfère qu'aux id.

Le problème, c'est que tous les articles me renvoie des liens voir aussi, alors qu'un seul est concerné !

Je pense que j'ai un souci dans l'ordre des boucles et dans la requête, mais je ne trouve pas quoi...

Help !
Modifié par montoumes (20 Aug 2008 - 11:07)
Finalement j'ai procédé selon un tips fournit par Heyoan il y a un certains temps sur un autre sujet :

$sql1 = "SELECT * FROM entrees WHERE entree_nom LIKE '".$donneeslettres['entree_nom']."'";
						$result1 = mysql_query($sql1) or die(mysql_error());

						if (mysql_num_rows($result1) > 0 ) { // Si ce code article existe dans la base
							$row1 = mysql_fetch_assoc($result1);					
					
							/*$sql2 = "SELECT entrees.entree_id, entrees.entree_nom, entrees_relations.entree_id, entrees_relations.relation_id FROM entrees, entrees_relations WHERE entrees_relations.entree_id LIKE '".$row1['entree_id']."' AND entrees_relations.relation_id = entrees.entree_id";*/
							
							/* $sql2 = "SELECT entrees.*, entrees_relations.* FROM entrees JOIN entrees_relations ON entrees_relations.relation_id = entrees.entree_id WHERE entrees.entree_id = ".$row1['entree_id'];*/
							$sql2 = "SELECT entrees.* FROM entrees, entrees_relations WHERE entrees_relations.entree_id = ".$row1['entree_id']." AND entrees_relations.relation_id = entrees.entree_id";
							
							$result2 = mysql_query($sql2) or die(mysql_error());
					
							if ( mysql_num_rows($result2) > 0 ) { // Si un (ou des) code(s) article sont associé(s) au 1er article
								while ($row2 = mysql_fetch_assoc($result2)) {
									echo "\t<p>".$row2['entree_nom']."</p>\n";
								}
							}
						}
montoumes a écrit :
Finalement j'ai procédé selon un tips fournit par Heyoan il y a un certains temps sur un autre sujet
Et... ça marche ? Smiley biggol

Si oui merci de rajouter un [Résolu] dans le titre. Smiley cligne