Affichage d'un tableau dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage d'un tableau dynamique

par Elisa » 18 août 2005, 11:14

Merci pour cette information. Je me mets en résolu. :P

par ouckileou » 18 août 2005, 11:13

OUAOUH :love1: C'est le rêve ces jointures! Je n'imaginais pas de telles subtilités. Merci ça marche!
dans l'idéal ta requête de base (la toute première) devrait même être faite comme ça :

Code : Tout sélectionner

SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr FROM societes s INNER JOIN groupes g ON s.RefGroupe=g.IdGroupe ORDER BY IdSociete
la jointure est bien en évidence, le WHERE étant reservé au filtrage : date supérieure à aujourd'hui, age <= 20 ... etc
le INNER ne va prendre que les lignes qui remplissent la condition
Une petite question. Si je veux faire un petit texte disant: La base contient X groupes, Y sociétés et Z produits. Est-ce que j'ai plus intérêt à utliser la fonction COUNT ou mysql_num_rows?
ça dépend :
si tu n'as pas besoin des résultats, une requête avec COUNT(*) sans hésiter : plus rapide
on a pas besoin de se ramener 200 000 résultats si c'est juste pour les compter

maintenant si tu affiches les résultats, et que c'est juste une info en plus, personnellement j'utiliserai cette fonction, pas la peine de faire une autre requête SQL

par Cyrano » 18 août 2005, 11:12

La différence est au niveau de l'exécution:
- COUNT va s'Exécuter en SQL et ça retournera directement le nombre;
- mysql_num_rows va obliger le SGBD à extraire tout et ensuite tu rajoutes une instruction PHP qui récupère le nombre.

Donc un COUNT sera à priori plus approprié, mais ça dépend toujours des circonstances.

par Elisa » 18 août 2005, 11:08

OUAOUH :love1: C'est le rêve ces jointures! Je n'imaginais pas de telles subtilités. Merci ça marche!

Une petite question. Si je veux faire un petit texte disant: La base contient X groupes, Y sociétés et Z produits. Est-ce que j'ai plus intérêt à utliser la fonction COUNT ou mysql_num_rows?

par ouckileou » 18 août 2005, 10:52

oui avec une jointure externe : http://www.laltruiste.com/document.php? ... nture.html

Code : Tout sélectionner

SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr FROM societes s LEFT OUTER JOIN groupes g ON s.RefGroupe = g.IdGroupe ORDER BY IdSociete
même les lignes de sociétés qui ne sont pas liées à groupes seront prises en compte

par Elisa » 18 août 2005, 10:41

J'ai fait le test. Il me trouve 0 résultat. En revanche il semblerait que lorsque RefGroupe=null, il ne m'affiche pas les résultats. Lorsque je modifie et que je mets un groupe, ô miracle du PHP, ça s'affiche. Est-ce que je peux modifier ma requête pour qu'elle prenne le "null" en compte?

par ouckileou » 18 août 2005, 10:21

moi j'opte pour un problème de requête :)

ou plutôt je pense que ta requête ne renvoie qu'un seul résultat, je ne vois pas trop comment l'alternance des couleurs influerait

mais bon pour en être sur, rajoute ça après ton mysql_query :
$nbResultats = mysql_num_rows($result);
echo 'Il y a '.$nbResultats.' résultat(s)';
à partir de là on verra ;)
mysql_num_rows -- Retourne le nombre de lignes d'un résultat MySQL
=> http://fr2.php.net/mysql_num_rows

Affichage d'un tableau dynamique

par Elisa » 18 août 2005, 10:16

Bonjour à tous!

Voici un script qui a été élaboré en partie sur le forum. Il est censé afficher un tableau dynamique. Malheureusement, seule la première ligne s'affiche. J'ignore si c'est un problème de requête. Mais j'opte plutôt pour le système d'alternance. Merci pour votre aide.
<?php
$couleur1 = '#ffcc00';
$couleur2 = '#ffffe0';
?>

<table class="tableau">
<table width=2000 rules="cols" border=0 cellspacing=0 cellpadding=10>

<!-- titres-->

<tr bgcolor="<?php echo $couleur1; ?>">
<td><b>Id</b></td>
<td><b>Nom</b></td>
<td><b>Autre nom</b></td>
<td><b>Groupe</b></td>
<td><b>Spécialité</b></td>
<td><b>Présentation</b></td>
<td><b>Inf.compl.</b></td>
<td><b>Pays d'origine</b></td>
<td><b>Adresse</b></td>
<td><b>Tel</b></td>
<td><b>Fax</b></td>
<td><b>Site société </b></td>
<td><b>NomReprFr </b></td>
<td><b>AdresseReprFr</b></td>
<td><b>TelReprFr</th>
<td><b>FaxReprFr </b></td>
</tr>


<?php
#connection à la base et sélection de la table et des champs#
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
	FROM societes s, groupes g WHERE s.RefGroupe=g.IdGroupe ORDER BY IdSociete";
	$result=mysql_query($requete)or die(mysql_error());

$cptCouleur = 1;
while ($val=mysql_fetch_array($result))
{
$couleur = ($cptCouleur % 2 == 0)?$couleur1:$couleur2;
?>

<tr bgcolor="<?php echo $couleur; ?>">
<td> <?php print ($val["IdSociete"]);?> </td>
<td> <?php print ($val["NomSociete"]);?> </td>
<td> <?php print ($val["AutreNomSociete"]);?> </td>
<td> <?php print ($val["NomGroupe"]);?> </td>
<td> <?php print ($val["Specialite"]);?> </td>
<td> <?php print ($val["Presentation"]);?> </td>
<td> <?php print ($val["InfCompl"]);?> </td>
<td> <?php print ($val["PaysOrigine"]);?> </td>
<td> <?php print ($val["Adresse"]);?> </td>
<td> <?php print ($val["Tel"]);?> </td>
<td> <?php print ($val["Fax"]);?> </td>
<td> <?php print ($val["SiteSociete"]);?> </td>
<td> <?php print ($val["NomReprFr"]);?> </td>
<td> <?php print ($val["AdresseReprFr"]);?> </td>
<td> <?php print ($val["TelReprFr"]);?> </td>
<td> <?php print ($val["FaxReprFr"]);?> </td>
</tr>


<?php
$cptCouleur++;
}
mysql_close($lien);
?>

</table>