requête mysql foireuse [MYSQL] - Programmation
Marsh Posté le 31-05-2001 à 00:35:05
Tu as écrit deux fois "WHERE"
->$result = mysql_query("SELECT nom_mat, valid, nom_sscat, nom_fab FROM materiel, sscategories, fabricants WHERE fabricants.id_fab = materiels.id_fab AND sscategories.id_sscat = materiels.id_sscat ORDER BY materiels.id_mat", $db);
@+
Marsh Posté le 31-05-2001 à 01:35:21
ça marche pas... je pige plus rien là.... voici de quoi vous faire une idée.... ça peut aider....
Marsh Posté le 31-05-2001 à 01:41:00
cherchez pas.....; j'avais oublié un s sur le nom d'une table....... halalala fatigue quand tu nous tiens.... bref, j'arrête pour ce soir... dodo
Marsh Posté le 31-05-2001 à 09:46:13
Bon, là je suis réveillé, ça marche...
Mais ! car il y a toujours un mais je n'arrive pas à ajouter un enregistrement à ma table avec phpmyadmin !!!
j'ai cette erreur, que je ne comprends pas d'un iota...
"Duplicate entry '' for key 2"
Elcap
Marsh Posté le 31-05-2001 à 09:53:03
bah en gros t'essaies d'inserer une ligne ds ta table avec une clé primaire qui existe deja !
Marsh Posté le 31-05-2001 à 10:12:10
c'est bizarre... ma clé primaire c'est :
id_mat qui est en auto_increment
je n'ai qu'un enregistrement dans cette base... id_mat est à 1
quand j'insère un nouvel enregistrement, je ne mets rien..... pour qu'il le passe à 2.... et si j'essaye en forcant (cad en mettant 2 voire 3) c'est pareil...
Marsh Posté le 31-05-2001 à 10:19:09
ah ? heu.. joker !
la structure de ta table materiels et la requete que t'essaie de faire c koi (en sql of course)
[edit]--Message édité par __Lolo__--[/edit]
Marsh Posté le 31-05-2001 à 10:21:50
pour la structure, regarde un peu plus haut dans ce thread... j'ai mis une image
pour la requête la voici :
INSERT INTO materiels VALUES( '', '8', '2', 'A902MT', '0000-00-00', 'http://www.iiyama.fr/documents/Caracteristiques%20Techniques/A902MT_CARACT.htm', '', '', '90', 'o');
Marsh Posté le 31-05-2001 à 10:33:54
2 points bizarres :
1- "Duplicate entry '' for key 2" : manifestement il essaie d'insérer une valeur vide ('') dans la table. Est-ce que tu es sûr d'avoir activé l'insertion auto de valeur pour la colonne ?
2- "Duplicate entry '' for key 2" : key 2 fait penser à une clé composée. N'y aurait-il pas une deuxième colonne entrant dans la composition de la clé primaire ?
Marsh Posté le 31-05-2001 à 10:37:38
elcap a écrit a écrit : pour la structure, regarde un peu plus haut dans ce thread... j'ai mis une image pour la requête la voici : INSERT INTO materiels VALUES( '', '8', '2', 'A902MT', '0000-00-00', 'http://www.iiyama.fr/documents/Caracteristiques%20Techniques/A902MT_CARACT.htm', '', '', '90', 'o'); |
essaye ca :
Code :
|
Marsh Posté le 31-05-2001 à 10:38:20
ds ta requete t'essaie de mettre une chaine vide comme clé primaire et ca lui plait pas, forcément...
Marsh Posté le 31-05-2001 à 10:41:37
__Lolo__ a écrit a écrit : essaye ca :
|
C'est exactement la même chose, "elcap" n'a pas besoin de définir les champs pour son insertion puisqu'il en respecte l'ordre et qu'il les insère tous.
Marsh Posté le 31-05-2001 à 10:42:45
si tu regardes bien g viré le 1er champ justement ... (la clé primaire est en auto_increment dc pas le droit de l'inserer a la main)
Marsh Posté le 31-05-2001 à 10:48:15
__Lolo__ a écrit a écrit : si tu regardes bien g viré le 1er champ justement ... (la clé primaire est en auto_increment dc pas le droit de l'inserer a la main) |
Exact, j'avais pas vu.
Marsh Posté le 31-05-2001 à 10:52:02
_lolo_-> Par contre, tu peux très bien insérer un CLE dont la propriété est auto_icrement si tu lui donne rien ('') comme valeur...
Marsh Posté le 31-05-2001 à 10:55:05
irulan a écrit a écrit : 2 points bizarres : 1- "Duplicate entry '' for key 2" : manifestement il essaie d'insérer une valeur vide ('') dans la table. Est-ce que tu es sûr d'avoir activé l'insertion auto de valeur pour la colonne ? 2- "Duplicate entry '' for key 2" : key 2 fait penser à une clé composée. N'y aurait-il pas une deuxième colonne entrant dans la composition de la clé primaire ? |
voici ma table :
Champ Type Attributes Null Defaut Extra
id_mat mediumint(255) Non auto_increment
id_sscat smallint(255) Non 0
id_fab smallint(255) Non 0
nom_mat varchar(255) Non
date_fab date Oui
fiche_web varchar(255) Oui
achat_web1 varchar(255) Oui
chem_img varchar(255) Oui
note_glob varchar(255) Non
valid enum('o','n') Non n
j'ai donc bien l'auto-incrémentation...
et le pire c'est que l'insertion du premier enregistrement s'est bien passée... je l'aurai donc vu si j'vais glissé une clé composite...
Marsh Posté le 31-05-2001 à 10:56:02
g pas mysql sous la main dc je peux pas tester mais il me semblait que son message d'erreur venait de la justement...
elcap tu pourrais donner la syntaxe de ton create table plutot que ton image ca nous aiderait peut-etre ?
Marsh Posté le 31-05-2001 à 10:56:41
fly lm a écrit a écrit : _lolo_-> Par contre, tu peux très bien insérer un CLE dont la propriété est auto_icrement si tu lui donne rien ('') comme valeur... |
je confirme... on peut lui donner une chaine vide en auto-incrément... ça marche pour toutes mes autres tables...
vous noterez que j'essaye avec une requête mais que l'interface phpmyadmin donne la même erreur.....
Marsh Posté le 31-05-2001 à 10:57:32
__Lolo__ a écrit a écrit : g pas mysql sous la main dc je peux pas tester mais il me semblait que son message d'erreur venait de la justement... elcap tu pourrais donner la syntaxe de ton create table plutot que ton image ca nous aiderait peut-etre ? |
voici :
CREATE TABLE materiels (
id_mat mediumint(255) NOT NULL auto_increment,
id_sscat smallint(255) NOT NULL,
id_fab smallint(255) NOT NULL,
nom_mat varchar(255) NOT NULL,
date_fab date,
fiche_web varchar(255),
achat_web1 varchar(255),
chem_img varchar(255),
note_glob varchar(255) NOT NULL,
valid enum('o','n') DEFAULT 'n' NOT NULL,
PRIMARY KEY (id_mat),
UNIQUE achat_web1 (achat_web1),
UNIQUE nom_mat (nom_mat),
UNIQUE id_mat (id_mat)
);
Marsh Posté le 31-05-2001 à 11:05:13
La structure de ta table est mauvaise.
[Tu ne peux pas avoir un MEDIUMINT ou un SMALLINT dont la taille est 255. Pour MEDIUMINT la taille en octet est de 3 et pour SMALLINT de 2. Le problème ne vient peut-être pas de là, mais c'est déjà une erreur de structure de table...]
= CONNERIE voir mon dernier POST
[edit]--Message édité par fly lm--[/edit]
Marsh Posté le 31-05-2001 à 11:11:04
je veux bien mais pourquoi ne me met-il pas uine erreur à la création de la table ??? la première fois je m'étais franchement planté en mettant 2500... là il m'a sorti une erreur en me disant que ça ne pouvait pas dépasser 255....
Marsh Posté le 31-05-2001 à 11:19:31
Si tu reprends le message d'erreur "Duplicate entry '' for key 2" , est-ce que key 2 ne signifie pas que la contrainte d'unicité que tu as posé sur achat_web1 est violée ?
Vires les contrainte d'unicité pour voir ?
Marsh Posté le 31-05-2001 à 11:22:35
irulan > la tu m'as grillé, c exactement ce que j'allais dire
Marsh Posté le 31-05-2001 à 11:26:05
[Ouaih, mais je t'assure que 255 pour un MEDIUMINT ou un SMALLINT, cela n'a pas de sens. Si cela fonctionne (j'en doute, même s'il ne te retourne pas d'erreur), cela voudrait dire que MySQL t'alloue 255 octets pour un entier qui selon le cas est de 2 ou 3 octets. Dans ce cas tu perdrais inutilement de la place.]
=CONNERIE VOIR MON DERNIER POST
La suite c'est bon :
TINYINT(4) -128 à 127 -> 1 octet
SMALLINT(6) -32 768 à 32 767 -> 2 octets
MEDIUM(9) -8 388 608 à 8 388 607 -> 3 octets
[edit]--Message édité par fly lm--[/edit]
Marsh Posté le 31-05-2001 à 11:27:24
__Lolo__ a écrit a écrit : irulan > la tu m'as grillé, c exactement ce que j'allais dire |
Marsh Posté le 31-05-2001 à 11:40:45
Là je me suis même embrouillé moi même avec ces histoire d'octets. En fait, ce que tu as entre paranthèse derrière le SMALLINT(M) par exemple correspond à la taille de l'affichage (pas à un nombre d'octets). Oups c'est plus claire, tu ne peux pas dépasser 4 pour un TINNYINT (1 octet), 6 pour un SMALLINT (2 octets) ET 9 pour le MEDIUMINT (3 octets).
Je ne sais pas si c'est plus claire ???
Marsh Posté le 31-05-2001 à 11:42:38
Irulan, lolo... vous êtes nuls de pas l'avoir vu plus tôt
et moi encore plus d'avoir mis une contrainte pareille là-dessus... et de m'être fait avoir... c'est dramatique
pour être sûr, j'ai pas viré la contrainte d'unicité, j'ai juste inséré mon truc en ne laissant pas le champs vide, avec une chaine kelkonke... ben ça marche, évidemment....
donc merci
Marsh Posté le 31-05-2001 à 11:43:48
On tachera de faire mieux la prochaine fois
A ton service
Marsh Posté le 31-05-2001 à 11:44:33
fly, je crois que j'ai mal compris le fonctionnement... avant de poser des milliards de questions, je vais potasser la doc et je reviendrais avec un nouveau message si besoin
merci
Marsh Posté le 31-05-2001 à 11:45:38
irulan a écrit a écrit : On tachera de faire mieux la prochaine fois A ton service |
non mais c'est vrai, merci merci
Marsh Posté le 30-05-2001 à 23:55:43
Commme vous avez étés si bons la dernière fois... je vous redemande de l'aide
je fais ceci :
$result = mysql_query("SELECT nom_mat, valid, nom_sscat, nom_fab FROM materiel, sscategories, fabricants where fabricants.id_fab = materiels.id_fab and where sscategories.id_sscat = materiels.id_sscat ORDER BY materiels.id_mat", $db);
mais visiblement $result renvoie false.... à mon avis ma requête est foireuse... sûrement un pb de syntaxe... mais je vois pas où
un ptit coup d'main serait pas de refus