|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour.
Si je place cette commande sans ajouter WHERE `shorturl` NOT IN ('test'), ça va fonctionner. "test" va être ajouté peut importe qu'il existe ou non. Je veux ajouter "test" que s'il n'existe pas dans la table. Faire ça en mysql. Comment? Code :
INSERT INTO `site`.`table` (`id`, `shorturl`, `longurl`) VALUES (NULL, 'test', 'test.com') WHERE `shorturl` NOT IN ('test') |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Y'a d'autres choses qui faut ajouter à ce que je comprends. Mais, je veux simplement ne pas insérer si la valeur existe.
INSERT IGNORE ... ne fonctionne pas. INSERT IGNORE INTO non plus. Citation:
|
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
il faut bien mettre tes indexes, visiblement shorturl doit avoir un index UNIQUE, tu l'as bien mis ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
sur la colonne ID l'index.
j'ai pensé à qqchose du genre : Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
ça c'est l'index PRIMARY KEY
tu dois mette un autre index UNIQUE sur ta colonne shorturl
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
|
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
c'est bon tu peux faire ton IGNORE maintenant
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Christele Inscription : novembre 2009 Messages : 661 ![]() |
Bonjour,
Tu es OK que par rapport a ta question, stealth35 t'indique comment organiser ta table pour n'avoir pour tout tes ajouts qu'une seule instruction et sans erreurs Si au contraire tu préféres rester a ta question d'origine, tu n'y coupes pas d'un minimum de deux requétes un SELECT puis l'INSERT ! |
|
00
|
|
|
#10 | |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Je souhaiterai plus faire un test d'existance de la clé en utilisant mysql.
Placer un INDEX UNIQUE sur le champ 'shofturl', ça ne fonctionne pas. Il est déjà dans le champ ID. IGNORE ne marche pas non plus. Citation:
|
|
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
on peux mettre autant d'index que le l'on veut dans une table, sais tu vraiment a quoi sert un index ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#12 |
|
Membre chevronné
![]() Christele Inscription : novembre 2009 Messages : 661 ![]() |
Oui tout les champs ne peuvent étres mis en UNIQUE, en effet les binaires sont bien sur refusés, il te faut des type CHAR VARCHAR INT etc...
Quelle est la nature de shofturl |
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Il est VARCHAR
Je revise ce tutoriel : http://sqlpro.developpez.com/cours/sqlaz/dml/#L1.5 Selon ce que j'ai lu, on ne peut pas faire de sous-requête avec INSERT sous MYSQL. J'utilise Mysql 5.0.55 |
|
|
00
|
|
|
#14 | ||
|
Membre chevronné
![]() Christele Inscription : novembre 2009 Messages : 661 ![]() |
Donc sans aucun probleme tu peux faire (s'il nexiste pas encore) si non ça le créerait inutilement en double
Code :
Mais le piége (et il me semble que tu es dans ce cas), est si ta table a déjas sur ce champ des doublons tu aura un message d'erreur bien sur ! Il faut en premier nettoyer ta table |
||
|
00
|
|
|
#15 | |||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Effectivement, ma table avait déjà des doublons. Je ne pouvais pas ajouter UNIQUE. mais je suis obligé de mettre INSERT IGNORE INTO?
Citation:
|
|||
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
ok.. je viens de comprendre.
INSERT IGNORE INTO va permette d'ignorer un message d'erreur. UNIQUE va permette de ne pas avoir de doublon dans la table. Je viens de tester. Mais, si je mets pas INDEX "IGNORE", j'aimerais bien pouvoir personnaliser le message d'erreur envoyé par mysql. |
|
|
00
|
|
|
#17 | ||
|
Membre chevronné
![]() Christele Inscription : novembre 2009 Messages : 661 ![]() |
Quand tu aura pour une de tes tables
1) viré les doublons pour un champ 2) fais un ALTER etc .... pour rendre le champ unique, Alors tu pourras faire Code :
|
||
|
10
|
|
|
#18 | ||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
J'utilise MYSQLI alors mysql_affected_rows() ça ne marche pas.
J'utilise une alternative qui est : Code :
mysqli : Code :
|
||||
|
|
00
|
|
|
#19 | ||
|
Membre chevronné
![]() Christele Inscription : novembre 2009 Messages : 661 ![]() |
Je viens de tester si PDO laissait passer le retour d'info, la réponse est OUI
Donc dans les conditions identiques de cle uniques etc... Code :
ou la valeur de l'index auto-incrementé si succés même valeur donc que $bdd->lastInsertId(); HOP YHIS HELP ! |
||
|
00
|
|
|
#20 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
__________________
http://blog.stealth35.com/ |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com