|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2009 Messages : 53 ![]() |
Bonsoir,
J'ai 2 tables (immeuble, proprietaire); Immeuble ( ID, Proprietaire) Proprietaire( ID, NomProprietaire) Immeuble(Proprietaire) est lié à Proprietaire(ID) normalement. J'ai fait un premier enregistrement qui enregistrait dans chaque immeuble, l'identifiant du propriétaire s'il existait. Ensuite, j'ai voulu remplir les champs vides restants, par un autre algorithme (je ne vais pas détailler). Le souci, c'est que ces champs qui sont maintenant remplis, sont remplis d'erreurs. Ces erreurs, ne correspondent en rien aux ID des propriétaires. J'ai donc pensé à faire cette requête : Code :
Cependant, quand je lance la requête d'update, elle ne fonctionne pas, pas d'erreur de syntaxe ni rien, juste "0 enregistrement affecté". Pouvez-vous me l'expliquer s'il vous plait? Je vous remercie! |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 853 ![]() |
salut,
c'est quoi une erreur pour toi? ![]() c'est quoi les moteurs: myisam, innodb? tu essayes de mettre du texte ( '' ) dans un champ numérique... ça te choque pas un peu?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#3 | |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2009 Messages : 53 ![]() |
Citation:
Une erreur, pour moi c'est quand il y a un problème entre ce qu'on attend et ce qui se produit. MyIsam : type de table utilisé en MySql qui permet une recherche efficace sur du texte InooDb : type de table utilisé essentiellement pour faire des relations (pour ce que j'en sais). Les champs ID propriétaires sont des champs varchar (oubliés de le dire) . |
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 853 ![]() |
lol oui mais nous, on ne sait pas ce que ça te fait à quoi elles ressemblent tes erreurs...
![]() c'est très bien, tu as compris ce que ces moteurs sont mais je te demandais en fait quel type de moteur tu utilises pour tes tables... ![]() je vais donc te le dire à toi aussi, les clés primaires et étrangères ne doivent jamais être des champs textes... car il y a des indexes automatiques sur elles et que c'est pas du tout performant et hyper lourd en termes de place que représente ta table en mémoire et en terme de fichiers aussi... ID= identifiant... ça veut dire qu'on utilise un code numérique qui permet de faire des recherches sur des indexes très légers et efficaces.... avant qu'on refasse un peu mieux, déjà, tes tables, explique ce que tu veux faire et la totalité des données que tu veux brasser... comme ça, on fera un schéma de base de données efficace et qui collera à ce que tu veux faire... qu'en penses-tu?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Est ce qu'ID dans la table proprietaire est défini comme Primary Key ? Sinon ça devrait être le cas.
Un NULL dans la colonne ID de la table proprietaire fera "planter" la requête : select-not-in help-not-in-sql |
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2009 Messages : 53 ![]() |
J'ai simplifié au maximum mes tables réelles, mais l'enjeu y est.
Il n'y a pas d'erreurs comme tu l'entends, c'est juste qu'il affiche un "0 enregistrements affectés". Je comprends tout à fait l'intérêt de mettre un champ numérique, mais dans mon cas, je dois laisser ce champ texte. Je te remercie pour tes propositions d'optimisation. Oui, l'ID du proprietaire est une primary key. Il n'y a pas de NULL dans la table proprietaire, seulement dans le champ proprietaire de la table Immeuble. Je précise : la requête en select fonctionne parfaitement avec Code :
SELECT ID FROM Immeuble WHERE Proprietaire NOT IN ( SELECT ID FROM Proprietaire) |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 853 ![]() |
si tu as pu rentrer des valeurs pas dans la table liée c'est que tu es en myisam et qu'il n' y a donc pas de respect de l'intégrité référentielle...
ta requête de test sort combien de résultats?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#8 | |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2009 Messages : 53 ![]() |
Citation:
Ma requête (update) me sort 0 enregistrements affectés, quant à la requête en Select, elle me sort le nombre de résultats qui est attendu. |
|
|
|
00
|
|
|
#9 | ||
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
As-tu essayé avec une jointure ? Parce que MySQL accepte les jointures dans l'UPDATE : Code :
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com