sélectionner ligne -1 dans BDD

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 : sélectionner ligne -1 dans BDD

par ItaloBADI » 12 oct. 2005, 22:11

D'accord.

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

Merci à tous ! :wink:

par Truc » 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

par ItaloBADI » 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']; 

?>  

Re: sélectionner ligne -1 dans BDD

par Truc » 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:

par ItaloBADI » 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:

par Cyrano » 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.

par ItaloBADI » 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 ";

???

par Truc » 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" !!

par ItaloBADI » 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... :?

par ItaloBADI » 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 ?
:?

par ItaloBADI » 12 oct. 2005, 20:44

Merci.

Je vais voir ça...

Je vous tiens au courant ... :wink:

par heddicmi » 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...

sélectionner ligne -1 dans BDD

par ItaloBADI » 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: