sélectionner ligne -1 dans BDD

Eléphant du PHP | 93 Messages

12 oct. 2005, 18:21

Bonjour à tous,

voilà mon petit problème.

Je veux aficher dans un tableau les données de la semaine, et celles de la semaine dernière.

Or, dans ma BDD, les données sont classées par date, donc, par semaine.
La dernière étant celle de cette semaine, la précédente, celle de la semaine d'avant.

J'ai donc fait :
$sql = "SELECT * FROM recettes ORDER BY id DESC limit 0,1"; 
Mais comment sélectionner la précédente ?
Car si je fais :
	<tr>
                   <td>DONS</td>
                   <td> [color=red][b](??????)[/b][/color] </td>
	   <td>'.$data['dons'].'</td>
	</tr>
'.$data['dons'].' correspond aux dons de cette semaine.

Comment récupérer les dons de la semaine d'avant ?

J'aurais bien vu un truc du genre
<td>'.$data['dons(-1)'].'</td>

lol

Merci d'avance... :wink:

Mammouth du PHP | 568 Messages

12 oct. 2005, 18:35

Ne limite pas ta requête... Puis fait une boucle while pour parcourir les résultats... Un tutoriel explicite sur PHPdebutant...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 93 Messages

12 oct. 2005, 20:44

Merci.

Je vais voir ça...

Je vous tiens au courant ... :wink:

Eléphant du PHP | 93 Messages

12 oct. 2005, 20:57

Et bien, j'ai donc affiché les informations.

Mais où est l'intérêt pour moi ?

Car je ne peux toujours pas sélectionner UNIQUEMENT l'avant-dernière id, malheureusement.

Je peux afficher les infos, mais je ne peux pas les afficher indépendamment l'une de l'autre là.

Il doit y avoir quelque chose que je n'ai pas compris non ?
:?

Eléphant du PHP | 93 Messages

12 oct. 2005, 21:00

En fait, ça apparait l'un après l'autre.

Et j'aurais souhaité les faire apparaître chacun dans une colonne, au lieu de la même colonne...

Je vais réfléchir à ça... :?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 oct. 2005, 21:01

Salut, si tu n'a qu'un enregistrement par semaine, ta requete devrai marcher pourvu que tu séléctionne les deux 1er enregistrements:
$sql = "SELECT * FROM recettes ORDER BY date DESC limit 0,2";
avec un tri sur ton champ "date" !!

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 93 Messages

12 oct. 2005, 21:15

$sql = "SELECT * FROM recettes ORDER BY date DESC limit 0,2";

oui mais là cela ne me permet pas d'afficher automatiquement l'avant-dernière semaine....

ça affiche toujours la première ( sans boucle )

et si je fais une boucle, ça m'affiche toujours la première et la dernière sur les trois sélectionnées... Donc, les deux autour de l'avant-dernière.

N'existe-t-il pas une commande pour dire : dans la sélection des deux je veux afficher la dernière ?
Dans la sélection des deux, je veux afficher la première ?

$sql = "SELECT * FROM recettes ORDER BY date DESC limit 0,1";

Déjà je dois mettre 1 à la place de 2 non ?
Pour avoir deux affichages et non trois...
Car le zéro compte pour une.

$sql = "SELECT * FROM recettes ORDER BY date DESC limit 0,1 AND AFFICHE 1";

c'est cette commande que je cherche en fait...

Peut-on limiter à une seule entrée ?

$sql = "SELECT * FROM recettes ORDER BY date DESC limit 1 ";

???

Mammouth du PHP | 19672 Messages

12 oct. 2005, 21:22

La clause LIMIT comporte deux paramètres qui sont les deux chiffres qui suivent:
- le premier chiffre indique à partir de quelle ligne on récupère les infos, la première étant la ligne 0,
- le second chiffre indique le nombre de lignes à retourner;

Si tu veux l'avant-dernière ligne par rapport à un tri chronologique descendant, donc du plus récent au plus ancien en darnier, tu vas donc avoir une clause ORDER BY ton_champ DESC et la clause LIMIT 1, 1. On va donc trier du plus récent au plus ancien et récupérer uniquement la seconde ligne.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 93 Messages

12 oct. 2005, 21:23

$sql = "SELECT * FROM recettes ORDER BY id DESC limit 1,1";
Voilà ce qu'il semble être ma solution.

Je sélectionne juste de la ligne 1 à la ligne 1, soit l'avant-dernière puisque la dernière est la ligne 0...

En tout cas, ça semble fonctionner comme ça.
Je vais tester plus avant...

Merci à vous. :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 oct. 2005, 21:37

tant mieux que ça marche mais au début tu étais parti la dessus
Je veux aficher dans un tableau les données de la semaine, et celles de la semaine dernière.
donc les 2 premeières lignes de ta requete triée, enfin :pouce:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 93 Messages

12 oct. 2005, 21:55

Tout à fait, mais la question était : comment les afficher dans un même tableau sur deux colonnes côte à côte...

Voilà la solution que j'ai mis en place donc...

( j'ouvre l'avant-dernière ligne de la BDD : soit 1,1, puis je sors les éléments et je les mets en variable.
Ensuite je fais de même avec la dernière ligne.
Et je n'ai plus qu'à afficher mes variables dans le tableau, en colonnes.
)

( PS : les petits "h" et les petits "a", c'est pour me repérer entre HIER et AUJOURD'HUI... lol :wink: )
<? 
// on crée la requête SQL 
$sql = "SELECT * FROM recettes ORDER BY id DESC limit 1,1";
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req))
    { 
	$impotsh = $data['impots'];
	$locationh = $data['location'];
	$saisiesh = $data['saisies'];
	$royaleh = $data['royale'];
	$tributsh = $data['tributs'];
	$donsh = $data['dons'];
	$exportationsh = $data['exportations'];
	$autresh = $data['autres'];
	$totalh = $data['total'];
	}
	// on crée la requête SQL 
$sql = "SELECT * FROM recettes ORDER BY id ASC";
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req))
    { 
	$impotsa = $data['impots'];
	$locationa = $data['location'];
	$saisiesa = $data['saisies'];
	$royalea = $data['royale'];
	$tributsa = $data['tributs'];
	$donsa = $data['dons'];
	$exportationsa = $data['exportations'];
	$autresa = $data['autres'];
	$totala = $data['total'];
	}
    // on affiche les informations de l'enregistrement en cours 
    echo '
	 <table class="tableau">
   <tr>
       <th colspan="3">TRESORERIE D\'HOCHELAGA ( RECETTES )</th>
   </tr>
	  <tr>
       <td>RECETTES</td>
       <td>La semaine dernière</td>
       <td>Cette semaine</td>
		</tr>
   <tr>
       <td>IMPOTS</td>
	   <td>'.$impotsh.'</td>
       <td >'.$impotsa.'</td>
		</tr>
	<tr>
       <td>LOCATION DES TERRES</td>
	   <td>'.$locationh.'</td>
       <td >'.$locationa.'</td>
		</tr>
	<tr>
       <td>SAISIES ET AMENDES</td>
       <td>'.$saisiesh.'</td>
	   <td >'.$saisiesa.'</td>
	</tr>	
	<tr>
       <td>AIDE ROYALE</td>
        <td>'.$royaleh.'</td>      
		<td >'.$royalea.'</td>
	</tr>	
		<tr>
       <td>TRIBUTS</td>
       <td>'.$tributsh.'</td>
	   <td >'.$tributsa.'</td>
	</tr>
	<tr>
       <td>DONS</td>
       <td>'.$donsh.'</td>
	   <td >'.$donsa.'</td>
	</tr>
		<tr>
       <td> VENTES / EXPORTATIONS</td>
       <td>'.$exportationsh.'</td>
	   <td >'.$exportationsa.'</td>
		</tr>
		<tr>
		<td>AUTRES RECETTES</td>
	   <td>'.$autresh.'</td>
	   <td>'.$autresa.'</td>
	   </tr>
	   <tr>
	   <td> </td>
	   <td> </td>
	   <td> </td>
       </tr>
	   <tr>
	   <td>TOTAL RECETTES</td>
	   <td>'.$totalh.'</td>
	   <td>'.$totala.'</td>
       </tr>
      </table>';
	  $recettes = $data['total']; 

?>  

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 oct. 2005, 22:01

avec le limit 0,2 tu peut faire ceci:
<?
// on crée la requête SQL
$sql = "SELECT * FROM recettes ORDER BY id DESC limit 0,2";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
	
if($data = mysql_fetch_assoc($req))
    {
    $impotsa = $data['impots'];
    $locationa = $data['location'];
    $saisiesa = $data['saisies'];
    $royalea = $data['royale'];
    $tributsa = $data['tributs'];
    $donsa = $data['dons'];
    $exportationsa = $data['exportations'];
    $autresa = $data['autres'];
    $totala = $data['total'];
    }
	
if($data = mysql_fetch_assoc($req))
    {
    $impotsh = $data['impots'];
    $locationh = $data['location'];
    $saisiesh = $data['saisies'];
    $royaleh = $data['royale'];
    $tributsh = $data['tributs'];
    $donsh = $data['dons'];
    $exportationsh = $data['exportations'];
    $autresh = $data['autres'];
    $totalh = $data['total'];
    }
    // on affiche les informations de l'enregistrement en cours
    echo '
     <table class="tableau">
   <tr>
       <th colspan="3">TRESORERIE D\'HOCHELAGA ( RECETTES )</th>
   </tr>
      <tr>
       <td>RECETTES</td>
       <td>La semaine dernière</td>
       <td>Cette semaine</td>
        </tr>
   <tr>
       <td>IMPOTS</td>
       <td>'.$impotsh.'</td>
       <td >'.$impotsa.'</td>
        </tr>
    <tr>
       <td>LOCATION DES TERRES</td>
       <td>'.$locationh.'</td>
       <td >'.$locationa.'</td>
        </tr>
    <tr>
       <td>SAISIES ET AMENDES</td>
       <td>'.$saisiesh.'</td>
       <td >'.$saisiesa.'</td>
    </tr>    
    <tr>
       <td>AIDE ROYALE</td>
        <td>'.$royaleh.'</td>      
        <td >'.$royalea.'</td>
    </tr>    
        <tr>
       <td>TRIBUTS</td>
       <td>'.$tributsh.'</td>
       <td >'.$tributsa.'</td>
    </tr>
    <tr>
       <td>DONS</td>
       <td>'.$donsh.'</td>
       <td >'.$donsa.'</td>
    </tr>
        <tr>
       <td> VENTES / EXPORTATIONS</td>
       <td>'.$exportationsh.'</td>
       <td >'.$exportationsa.'</td>
        </tr>
        <tr>
        <td>AUTRES RECETTES</td>
       <td>'.$autresh.'</td>
       <td>'.$autresa.'</td>
       </tr>
       <tr>
       <td> </td>
       <td> </td>
       <td> </td>
       </tr>
       <tr>
       <td>TOTAL RECETTES</td>
       <td>'.$totalh.'</td>
       <td>'.$totala.'</td>
       </tr>
      </table>';
      $recettes = $data['total'];

?>
ou meme avec un while($data = mysql_fetch_assoc($req)), et ensuite faire des variçables dynamiques pour pouvoir afficher l'avant dernier enregistrement avant le dernier

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 93 Messages

12 oct. 2005, 22:11

D'accord.

Je comprends mieux le conseil du limit 0,2....

Merci à tous ! :wink: