Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum 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 22/07/2011, 21h48   #1
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 6
Points : 6
Par défaut Inverser deux entrées

Bonsoir à toutes et à tous.

Après recherches, je ne trouve pas de réponses à mon problème,
Je m'explique, j'aimerais, si c'est possible inverser deux entrées comme ceci

id nom ordre
1 dupont 1
2 dupuis 2
3 martin 3

id nom ordre
1 dupont 2
2 dupuis 1
3 martin 3

J'ai fais ceci :

Pour monter

Code :
1
2
3
 
mysql_query("UPDATE table SET ordre=".($test['ordre']-1)." WHERE id=".$test['id']."") or die(mysql_error());
mysql_query("UPDATE table SET ordre=".$test['ordre']." WHERE id=".($test['id']-1)."") or die(mysql_error());
Pour descendre

Code :
1
2
3
 
mysql_query("UPDATE table SET ordre=".($test['ordre']+1)." WHERE id=".$test['id']."") or die(mysql_error());
mysql_query("UPDATE table SET ordre=".$test['ordre']." WHERE id=".($test['id']+1)."") or die(mysql_error());
Mais ça ne fonctionne pas correctement, cela fait plusieurs jours que je suis dessus et je ne comprends même plus moi même ce que je fais.

Pourriez vous me remettre sur les rails

Merci d'avance
pelluche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 08h10   #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 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Que valent les variables $test['ordre'] et $test['id'] ?
__________________
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 23/07/2011, 12h43   #3
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 6
Points : 6
Bonjour CinePhil,

Alors voila ce que valent les variables :

Code :
mysql_query("UPDATE table SET ordre="(2-1)." WHERE id="(2)"") or die(mysql_error());
Donc le champs ordre de l'ID2 devient 1

Code :
mysql_query("UPDATE table SET ordre="(2)" WHERE id="(id-1)"") or die(mysql_error());
Et le champs ordre de l'ID1 devient 2-1 soit 1


Mais ce qui m'embête c'est que quand je me réfère à l'id-1 et que l'ordre du champ ordre devient 15342 ça ne fonctionne plus

Exemple

Code :
mysql_query("UPDATE table SET ordre="(5-1)." WHERE id="(2)"") or die(mysql_error());
Donc le champs ordre de l'ID2 devient 4

Code :
mysql_query("UPDATE table SET ordre="(5)" WHERE id="(id-1)"") or die(mysql_error());
Et le champs ordre de l'ID1 devient 5-1 soit 4

Je n'arrive pas à faire en sorte que l'ordre de l'ID1 devient 5 et l'ordre de l'ID5 devient 1

Et cela ne fonctionne plus, je pense que je devrais faire un "order by ordre" et me référer au champ ordre plutôt qu'à celui de l'ID.

Je ne sais pas si j'arrive à me faire comprendre...

Merci
pelluche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 14h45   #4
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 6
Points : 6
je viens de trouver mais au petit bonheur la chance

Pour ceux que cela intéresserait :

Code :
1
2
mysql_query("UPDATE table SET ordre=".$test['ordre']." WHERE ordre=".($test['ordre']-1)."") or die(mysql_error());
mysql_query("UPDATE table SET ordre=".($test['ordre']-1)." WHERE id=".$id."") or die(mysql_error());
En inversant les deux lignes cela à résolu le problème.

Ce que je ne comprends pas, c'est que la référence qui est l'ID se trouve à la deuxième ligne...

Je suis à moitié content parce que je n'ai pas bien compris la manipulation.
Donc je risque de recaler au prochain problème de ce genre.
Si quelqu'un pouvais m'expliquer



Merci!
pelluche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 15h06   #5
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
J'ai mis des commentaires :
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
<?php
// [........]
// *************************************
// Traitement : MONTER une LIGNE (on change sa position dans l ordre d affichage)
// *************************************
if ($traiter == 'MONTER')
{
	$id 		= mysql_real_escape_string(intval($_POST['id']));
	$ordre 		= mysql_real_escape_string(intval($_POST['ordre']));
	// ----------------------
	// on descend d abord la LIGNE du dessus
	$query_update 	= "UPDATE LaTable SET ".
			" ordre = 	'".$ordre."' ".
			" WHERE ordre = '".($ordre-1)."';";
	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
	// on remonte ensuite la LIGNE d un cran
	$query_update 	= "UPDATE LaTable SET ".
			" ordre = 	'".($ordre-1)."' ".
			" WHERE id = 	'".$id."';";
	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
}
// *************************************
// Traitement : DESCENDRE une LIGNE (on change sa position dans l ordre d affichage)
// *************************************
elseif ($traiter == 'DESCENDRE')
{
	$id 		= mysql_real_escape_string(intval($_POST['id']));
	$ordre 		= mysql_real_escape_string(intval($_POST['ordre']));
	// ----------------------
	// on remonte d abord la LIGNE du dessus
	$query_update 	= "UPDATE LaTable SET ".
			" ordre = 	'".$ordre."' ".
			" WHERE ordre =	'".($ordre+1)."';";
	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
	// on descend ensuite la LIGNE d un cran
	$query_update 	= "UPDATE LaTable SET ".
			" ordre = 	'".($ordre+1)."' ".
			" WHERE id = 	'".$id."';";
	mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
}
// *************************************
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/07/2011, 15h28   #6
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 6
Points : 6
Bonjour jreaux62,

Ok c'est plus clair maintenant, je crois que j'ai compris, merci jreaux62!

A+ bye
pelluche 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 07h23.


 
 
 
 
Partenaires

Hébergement Web