couper les résultats d'une requête

Eléphant du PHP | 281 Messages

02 août 2005, 08:25

Bonjour,
j'ai effectuer une recherche et j'ai pas trouver sur le forum, pourtant je suis persuader que quelqu'un en avait déjà parler mais je dois pas utiliser les bons termes de recherche mais je suis à cours donc je poste, m'en voulez pas ! :oops:
Alors enfaite je travail sur un site, ou je génère une liste de commissions, jusqu'à la pas de soucis, mais j'aimerai que mes résultat soit afficher comme ceci :

com 1 com 7
com 2 com 8
com 3 com 9
com 4 com 10
com 5
com 6

Donc sous forme de tableau, a 2 colonnes, histoire que la liste de descende pas pendant 5 pages et demi ;);)

Donc je ne sais pas comment "couper" le résultat envoyer par la bdd

ma requête :
<?
     $requete="select * from commissions";
     $result=mysql_query($requete);
      echo "<br>";
      while ($tableau=mysql_fetch_array($result))
       {
          echo "<tr><td class=\"redaction\"><a href=\"index.php?page=55&menu=2&id=" . $tableau['id_com'] . "\">" . $tableau['nom_com'] . "</a></td></tr>";
       }
?>
Rien de bien compliquez quoi... Merci beaucoup d'avance :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 août 2005, 08:45

tu 'nsières une nouvelle ligne

Code : Tout sélectionner

</td><td>
que tous les deux résultats

pour ça utilise un compteur
<table>
	<tr>
	<?
	$requete = "SELECT * FROM commissions";
	$result=mysql_query($requete);
	$cpt = 1;
	while ($tableau=mysql_fetch_array($result))
	{
		echo '<td class="redaction"><a href="index.php?page=55&menu=2&id='.$tableau['id_com'].'">'.$tableau['nom_com'].'</a></td>';
		if ($cpt % 2 == 0) { echo '</tr><tr>'; }
		$cpt++;
	}
	?>
</table>
pense à gérer la dernière ligne aussi ;)

édition : du code un peu moins bancal ;)

Eléphant du PHP | 281 Messages

02 août 2005, 08:58

c'est malin comme idée, j'aurais du y penser tout seul !
Ben merci :)
Comme d'hab t'es toujours là quand il faut ;);)

Mammouth du PHP | 19672 Messages

02 août 2005, 09:26

Mouais, sauf que les résultats n'apparaîtront pas come indiqué au départ et on aura donc :
com1 com2
com3 com4
com5 com6
etc...
Et si le nombre est impair, il manquera une cellule dans le tableau.

Voici une proposition pour un affichage :
com1 com4
com2 com5
com3 com6
<?
$requete = "select id_com, nom_com from commissions";
$result = mysql_query($requete);
/* On commence par compter le nombre de résultats obtenus. */
$nb_com = mysql_num_rows($result);
/* On vérifie que le résutat est un nombre pair ou impair */
$pair = $nb_com % 2 == 0 ? true : false;
/* 
   Pour obtenir un affichage sur deux colonnes de hauteur similaire, on 
   divise ce résultat par deux (arrondi à l'entier supérieur si le nombre 
   de résultats est impair)
 */
$nb_lignes = ceil($nb_com/2);
/* On récupère le résutat de la requête dans deux tableau indexé */
$id_com = array();
$nom_com = array();
while($commission = mysql_fetch_array($result))
{
    array_push($id_com, $commission['id_com']);
    array_push($nom_com, $commission['nom_com']);
}
?>
<table summary="">
<?php
/* À ce stade, on connait le nombre de commission, dnonc le nombre de lignes, il reste à construire le tableau */
for($i = 0; $i < $nb_lignes; $i++)
{
    $j = $i * 2;
?>
  <tr>
    <td class="redaction"><a href="index.php?page=55&menu=2&id=<?php echo($id_com[$i]); ?>"><?php echo($nom_com[$i]); ?></a></td>
    <?php
    /* Si on arrive à la dernière ligne du tableau on vérifie que le nombre est pair ou 
       impair pour afficher de toutes façon une cellule avec un contenu ou un espace 
       insécable si ce contenu n'existe pas */
    if($i == ($nb_lignes - 1))
    {
    ?>
    <td class="redaction"><?php echo($pair ? "<a href=\"index.php?page=55&menu=2&id=". $id_com[$j] ."\">". $nom_com[$j] ."</a>" : "&nbsp;"); ?></td>
    <?php
    }
    /* On est pas encore à la dernière ligne, afichage normal */
    else
    {
    ?>
    <td class="redaction"><a href="index.php?page=55&menu=2&id=<?php echo($id_com[$j]); ?>"><?php echo($nom_com[$j]); ?></a></td>
    <?php
    }
    ?>
  </tr>
<?php
}
?>
</table>
Un peu plus compliqué ;) mais ^ca devrait fonctionner très bien: si le nombre de résultats est impair, la dernière cellule sera à quand même avec un "&nbsp;" dedans et le nombre de com sera réparti sur deux colonnes, première colonne d'abord 1, 3, 5, 7 etc... et colonne 2 ensuite 2, 4, 6, etc...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 août 2005, 09:29

c'est vrai je n'ai pas fait attention à l'ordre

mais le principe est là, et j'avais dit "attention à la dernière ligne" ;)

Eléphant du PHP | 281 Messages

02 août 2005, 09:57

Oui, oui, merci, disons que c'est pour un peu plus de rigueur dans l'affichage, sachant que le fait que l'affichage se fasse

com1 com2
com 3 com 4

me dérange pas ! Mais Merci pour la précision je vais un peu decortiquer le code maintenant histoire de comprendre la logiqe ;)