Faire un Hashtag cloud à partir d'une BDD (MySQLi).

Eléphant du PHP | 101 Messages

18 mars 2019, 12:29

Salutations

Je galère un eu, je cherche à faire un Tag Cloud à partir des données d'une BDD déjà existante.

Cela fonctionne actuellement, mais :
1/ Ce n'est pas je pense la meilleure façon (requêtes ?)
2/ Je n'arrive pas à faire afficher le cloud en aléatoire.

Any idea ? ;)

Code : Tout sélectionner

<div class="paragraphe"> <h2>&nbsp;Hashtags : Les cat&eacute;gories de legs&nbsp;</h2> <ul class="tblcloud"> <?php // Serveur include 'moteurs/sql2-data.php'; // Nom de la table utilisee (ex : testmail) : $table = "Destock"; // Connexion SQL $connexion = mysqli_connect("$chemin_db","$login","$pass","$database"); // Tests de connexion if ($connexion->connect_error) { die('Erreur de connexion (' . $connexion->connect_errno . ') ' . $connexion->connect_error); } if (mysqli_connect_error()) { die('Erreur de connexion (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } // Requetes SQL // Compter les lignes $select = $connexion->query ("SELECT * FROM $table"); // Check Global $nbr = $select->num_rows; // Global $hashtags = $connexion->query ("select `Hashtag`, count(*) as num from $table WHERE `Collection` = 'WDA' group by `Hashtag` order by count(*) desc LIMIT 30"); // while ($hashtag = $hashtags->fetch_assoc()) { // determine the popularity of this term as a percentage //$percent = floor(($hashtag['num'] / $nbr) * 100); //echo $hashtag['Hashtag']."&nbsp;:&nbsp;".$hashtag['num']."&nbsp;Sur&nbsp;".$nbr."&nbsp;(".$percent.")<br />"; } while ($hashtag = $hashtags->fetch_assoc()) { // Determine the popularity of this term as a percentage $percent = floor(($hashtag['num'] / $nbr) * 100); // Si vide if ($hashtag['Hashtag'] == '') $hashtag['Hashtag'] = "NonReference"; // Determine the class for this term based on the percentage echo ("<li>"); if ($percent < 1): echo "<font size='-2'>" . $hashtag['Hashtag'] . "</font>"; elseif ($percent >= 1 and $percent < 2): echo "<font size='-1'>" . $hashtag['Hashtag'] . "</font>"; elseif ($percent >= 2 and $percent < 5): echo "<strong>" . $hashtag['Hashtag'] . "</strong>"; elseif ($percent >= 5 and $percent < 10): echo "<font size='+1'><strong>" . $hashtag['Hashtag'] . "</strong></font>"; elseif ($percent > 10): echo "<font size='+2'><strong>" . $hashtag['Hashtag'] . "</strong></font>"; endif; echo ("</li>"); } ?> </ul> </div>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8107 Messages

18 mars 2019, 14:31

Pour l'affichage aléatoire, tu peux ajouter ORDER BY RAND() à ta requête pour avoir les résultats dans un ordre aléatoire
https://sql.sh/fonctions/rand
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 101 Messages

18 mars 2019, 14:33

En plus du "order by count(*) desc" ?

Eléphant du PHP | 101 Messages

18 mars 2019, 17:54

Bon, hé bien, j'ai réussi tout seul, je pense...
A moins que vous trouviez mon code immonde ou on-optimisé, ce qui est totalement possible, mais la l'aléatoire fonctionne.

J'ai juste mis en tableau les données de la BDD, pour ensuite les randomizer.

Code : Tout sélectionner

<div class="paragraphe" align="center"> <h2>&nbsp;Tag cloud : Les cat&eacute;gories r&eacute;currentes de nos legs&nbsp;</h2> <br /> <ul class="tblcloud"> <?php // Serveur include 'moteurs/sql2-data.php'; // Nom de la table utilisee (ex : testmail) : $table = "Destock"; // Connexion SQL $connexion = mysqli_connect("$chemin_db","$login","$pass","$database"); // Tests de connexion if ($connexion->connect_error) { die('Erreur de connexion (' . $connexion->connect_errno . ') ' . $connexion->connect_error); } if (mysqli_connect_error()) { die('Erreur de connexion (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } // Requetes SQL // Compter les lignes $select = $connexion->query ("SELECT * FROM $table"); // Check Global $nbr = $select->num_rows; // Global $hashtags = $connexion->query ("select `Hashtag`, count(*) as num from $table WHERE `Collection` = 'WDA' group by `Hashtag` order by count(*) desc LIMIT 35"); // Check Hashtag // Preparation du tableau $HT = array(); // Tableau vierge while ($row = $hashtags->fetch_assoc()) { $Hashtag = $row['Hashtag']; $count = $row['num']; $HT[] = array('Hashtag' => $Hashtag, 'Count' => $count); } // Melange des Hashtags shuffle($HT); // Boucle daffichage foreach ($HT as $Hashtag) { // Creation du pourcentage $percent = floor(($Hashtag['Count'] / $nbr) * 100); // Si vide if ($Hashtag['Hashtag'] == '') $Hashtag['Hashtag'] = "NonReference"; // Class en fonction du pourcentage echo ("<li>"); if ($percent < 1): echo "<font size='-2'>" . $Hashtag['Hashtag'] . "</font>"; elseif ($percent >= 1 and $percent < 2): echo "<font size='-1'>" . $Hashtag['Hashtag'] . "</font>"; elseif ($percent >= 2 and $percent < 3): echo "<strong>" . $Hashtag['Hashtag'] . "</strong>"; elseif ($percent >= 3 and $percent < 5): echo "<font size='+1'><strong>" . $Hashtag['Hashtag'] . "</strong></font>"; elseif ($percent > 5): echo "<font size='+2'><strong>" . $Hashtag['Hashtag'] . "</strong></font>"; endif; // echo "&nbsp;(" . $Hashtag['Count'] . "&nbsp;Soit&nbsp;" . $percent . "%)"; // Debugg echo ("</li>"); } ?> </ul> </div>