Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2011, 14h10   #1
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 2
Points : 2
Par défaut précédent/suivant sur ligne table MyISAM

Bonjour,

J'ai un code qui m'affiche une annonce par page. Je navigue d'annonce en annonce par "précédent" (page_actuelle-1) et "suivant" (page_actuelle+1) liés actuellement aux numéros de références qui se suivent pour l'instant comme les id. Je n'ai aucun problème de fonctionnement avec ce code.

Le champ "reference" est amené à disparaître et les annonces seront ordonnées par ordre descendant d'insertion (date_insertion) mais je ne parviens pas à formuler mon code afin que "précédent" fasse le lien avec la ligne effectivement précédente dans ma_table et que "suivant" fasse le lien avec la ligne effectivement suivante dans ma_table.

Quelqu'un veut-il bien me mettre sur la voie ?

Merci.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
<?php include("connexion.php"); ?>
 
	<?php
		$messages_par_page=1;
		$navigation=0;
		$nomTable='ma_table';
		$identifiant='id';
		$reference='reference';
		$titre='titre';
		$description='description';
		$nom_page='reponses2.php';
 
		$entree_total = $bdd->query('SELECT COUNT(*) AS total FROM ma_table');
		$donnees_total = $entree_total->fetch();
		$total=$donnees_total['total'];
		$nombre_de_pages = ceil($total/$messages_par_page);
 
		IF (isset($_GET['page'])) {
			$page_actuelle=intval($_GET['page']);
				IF($page_actuelle>$nombre_de_pages) {
					$page_actuelle=$nombre_de_pages;
				}
		}
		else {
			$page_actuelle=1; 
		}
 
		$premiere_entree=($page_actuelle-1)*$messages_par_page;
 
		IF($total == 0) {
			echo '<p>Aucune annonce pour le moment</p>';
		}
		else {
			$retour_messages=$bdd->query('SELECT *, DATE_FORMAT(date_insertion, "%d/%m/%Y") AS date_insertion 
										FROM ma_table 
										ORDER BY id ASC 
										LIMIT '.$premiere_entree.', '.$messages_par_page.'') 
										OR die(print_r($bdd->errorInfo()));
 
 
 
 
			echo '<br />';
				while($affiche = $retour_messages->fetch()) {
					echo '<h1>' .stripslashes($affiche['titre']). '</h1>' ;
 
					echo '<p>' .$affiche['date_insertion']. '</p>' ;
 
					echo '<h3>Description</h3>' ;	
						echo '<p>' .stripslashes($affiche['description']). '</p>' ;
 
					echo '<p class="postuler"><a href="postuler.php?reference=' .$affiche['reference']. '" title="Postuler">Postuler »</a></p>';
				} 
 
			echo '<br /><br />';
 
			IF($navigation==0){
				$suivant=$page_actuelle+1;
				$precedent=$page_actuelle-1;
 
					IF($precedent>=1) {
						echo '<a href="' .$_SERVER['PHP_SELF']. '?page=' .$precedent. '">« Précédent</a> * * * * * * * * * * *';
					}
					//else {}
 
					IF($suivant<=$nombre_de_pages){
						echo '<a href="' .$_SERVER['PHP_SELF']. '?page=' .$suivant. '"> Suivant »</a>';
					}
					//else {}
			}
 
			else IF($navigation==1) {
				echo 'Page : ';
				FOR($i=1; $i<=$nombre_de_pages; $i++) {
					IF($i==$page_actuelle) {
						echo '<span class="pagination-inactif">'.$i.'</span>'; 
					}    
					else {
						echo ' <a class="pagination" title="Page '.$i.'" href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a> ';
					}
				}
			}
 
			$retour_messages->closeCursor();	
		}
	?>
Marie08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h41   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 280
Points : 18 280
Envoyer un message via MSN à CinePhil
Soit une date_insertion D donnée. L'annonce précédente est celle qui a la plus grande date_insertion inférieure à D :
Code :
1
2
3
4
5
6
7
8
SELECT -- les colonnes nécessaires et pas étoile
FROM ta_table t1
WHERE t1.date_insertion = 
(
  SELECT MAX(t2.date_insertion)
  FROM ta_table t2
  WHERE t2.date_insertion < $D
)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h46   #3
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 402
Points : 238
Points : 238
Envoyer un message via MSN à GyZmoO
Salut !

On peut faire également comme ça non ? :

Code :
1
2
3
4
5
 
SELECT my_colonnes
FROM T_TABLE t
WHERE t.date_insertion > date_de_départ
ORDER BY t.date_insertion LIMIT 1
Et pour avoir la précédente ORDER BY DESC.

Est ce déconseillé de faire ainsi?? (C'est juste par pure curiosité !)
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h56   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
GyZmoO, la version de CinePhil est portable, pas la vôtre.
Il part du principe qu'il est capable de connaitre précisément l’élément suivant (ou précédent) via son Max, tandis que vous, vous laissez le SGBD se débrouiller via un tri afin de recuperer le 1er élément trouvé. Ce sont 2 approches différentes.
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h58   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 280
Points : 18 280
Envoyer un message via MSN à CinePhil
Mouais... LIMIT est spécifique à MySQL mais pourquoi pas.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h08   #6
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 402
Points : 238
Points : 238
Envoyer un message via MSN à GyZmoO
Citation:
GyZmoO, la version de CinePhil est portable, pas la votre.
Citation:
Mouais... LIMIT est spécifique à MySQL mais pourquoi pas.
Héhé, j'aurais appris un truc aujourd'hui
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 18h57   #7
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 2
Points : 2
Bonjour et grand merci de votre aide très précieuse

Marie
Marie08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h20.


 
 
 
 
Partenaires

Hébergement Web