Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 16/03/2006, 11h12   #1
Membre régulier
 
Inscription : janvier 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 483
Points : 80
Points : 80
Par défaut [Conception] Limiter l'insertion à une occurence

Bonjour,
J'ai une liste de nom de ville inséré dans une table, plusieurs fois la même, du genre :
1 paris
2 paris
3 paris
4 marseille
4 marseille

voici mon bout de code
Code :
1
2
3
4
5
6
$j=1;
				for($j=1;$j<2;$j++)
				{
					$req2="update qualification set name = '$joueur' where n_tournoi='$donnee'";
					$res2=mysql_query($req2);
				}
Je veux que quand il rencontre la ville paris il modifie le troisième champ qui est le nom d'un joueur. Mais je veux qu'il le modifie que à une seule occurence, avec ce bout de code il me met le nom du joueur a chaque qu'il rencontre la ville moi je ne veux le fasse que pour la première trouvé, je pensais qu'avec une boucle for çà oré marché.
Merci d'avance
leloup84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h15   #2
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
Je persiste et je signe :

D'où l'importance de passer par des Id en auto increment, ca permet ce cibler LA ligne qu'on veut modifier sans risque de collision entre les données...


Allez, je suis de bonne humeur ce matin

imaginons une table VILLE comme suit (pas belle d'un point de vue construction, il vaudrait mieux en faire deux différentes, mais c'est pour les besoins de l'exemple) :

Citation:
Id_ville Code_postal Nom_ville

1 75 001 Paris
2 75 003 Paris
3 75 005 Paris
4 75 008 Paris
5 75 009 Paris
(ici, Id_ville est en auto increment, on y touche jamais)

et les requêtes suivantes :
Code :
DELETE FROM VILLE WHERE Nom_ville='Paris'
Ca, ca va t'effacer toute ta table, boucle for ou pas

Code :
DELETE FROM VILLE WHERE Id_ville=3
Ca, ca va t'effacer uniquement la troisième ligne
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h22   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 14
Points : 14
Par défaut Re: Limité l'insertion a une occurence

Citation:
Envoyé par leloup84
1 paris
2 paris
3 paris
4 marseille
4 marseille
A quoi correspondent ces 1, 2, 3, 4 et...4?
Rei Itchido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h28   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Je pense que tu as un mauvais schéma de table pour 2 raisons :
  • Tu as des doublons sur la ligne entière
  • Tu dupliques l'information

Avec un schema correct, tu pourrais faire ceci sans crainte d'erreur :
Code :
1
2
3
UPDATE `table`
SET `champ`='valeur'
WHERE `champ_clef`='valeur_clef'
Bien sûr, dans ton cas cela suppose d'avoir une table `ville` qui ne contiendra pas grand chose et de savoir utiliser les jointures en SQL.
http://sql.developpez.com/sqlaz/jointures/
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h29   #5
Membre régulier
 
Inscription : janvier 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 483
Points : 80
Points : 80
c l'identifiant pardon la table c pluto du genre :
1 paris
2 paris
3 paris
4 marseille
5 marseille

CREATE TABLE `qualification` (
`num_qualif` int(3) NOT NULL auto_increment,
`n_tournoi` varchar(50) NOT NULL,
`name` varchar(25) NOT NULL default '',
`tour` varchar(50) NOT NULL default '',
PRIMARY KEY (`num_qualif`)
)
leloup84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h32   #6
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 14
Points : 14
Leloup, tu commences à comprendre ce que j'entendais par "revoies tes tables sinon tu fonces droit vers la cata"

Je te conseille vraiment de reposer à plat ton appli (avec une feuille et un crayon (et une gomme )) et de dessiner tes tables à la main en te disant "quelle table fait quoi? quelles infos dans quelles tables? comment lier 2 tables?" etc...
Rei Itchido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h33   #7
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
et bien alors pourquoi ne pas utiliser num_qualif dans ta requête ???

Et effectivement, ta table serait plus propre avec une table à part contenant simplement un Id_ville et le nom de la ville, et dans cette table ci, utiliser simplement l'Id_ville en clé étrangère à la place du nom.... m'enfin, ce que j'en dit ...
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h35   #8
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 14
Points : 14
Hmmmm

Si tes tournois ont un id, pourquoi on retrouve leur nom et pas leur id dans cette table?

PS : trop lent ^^
Rei Itchido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h36   #9
Membre régulier
 
Inscription : janvier 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 483
Points : 80
Points : 80
ok alors comment dire qu'on veut qu'il ne modifiue qu'une seule occurence
leloup84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h38   #10
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 14
Points : 14
Revoies tes tables on te dit.
Si tu veux rester avec cette structure, bon courage...
Rei Itchido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h39   #11
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
tu te moques du monde ??? je t'ai donné un exemple !!!

Le seul conseil que je peux encore te donner, c'est d'aller te pencher sur la conception de bases de données, pis d'aller lire un ou deux tutos...

J'abandonne moi, @+
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h42   #12
Membre régulier
 
Inscription : janvier 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 483
Points : 80
Points : 80
je suis d'accord avec l'id, mais comment dire qu'on ne que un seul soit modifié
leloup84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 12h06   #13
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
leloup84 : Sincèrement, tu exagères.
titoumimi t'a donné un exemple pour DELETE, je t'en ai donné un pour UPDATE et la doc MySQL te donne assurément tout ce dont tu as besoin.
Développez.com regorge de ressources que tu peux mettre à profit, je ne peux que t'inviter à chercher par toi-même car c'est la meilleure manière d'apprendre.

Cependant, il semble te manquer les concepts fondamentaux d'analyse et de conception de bases de données...
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 12h11   #14
Membre régulier
 
Inscription : janvier 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 483
Points : 80
Points : 80
Comme ceci alors :
Code :
$req2="update qualification set name = '$joueur' where n_tournoi='$donnee' and num_qualif = (select min(num_qualif) from qualification)";
Parce que çà ne fonctionne pas
leloup84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 12h13   #15
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082


bon, sur ce, je vais me pendre ....
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 12h50   #16
Membre régulier
 
Inscription : janvier 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 483
Points : 80
Points : 80
je ne comprend pas ce qui ne va pas dans cette requête :
Code :
$req2="update qualification set name = '$joueur' where n_tournoi='$donnee' and num_qualif = (select min(num_qualif) from qualification)";
Le num_quaif je suis bien obligé de mettre min puisque je ne sais pas sur quel ligne il va rencontré le nom de la ville correspondante
leloup84 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 05h53.


 
 
 
 
Partenaires

Hébergement Web