requête foireuse... un peu plus dur :) [MySQL] - Programmation
Marsh Posté le 05-06-2001 à 20:27:03
on peut pas imbriquer les requetes SELECT en mysql je crois
Marsh Posté le 05-06-2001 à 20:41:45
merdasse... c'est pour ça que ça marche pas.... putain, j'étais pourtant tout fier de ma requête
t'as une idée pour contourner le pb ?
Marsh Posté le 05-06-2001 à 20:47:33
tu peux créer une table temporaire ... je n'ai pas la syntaxe en tête.
Marsh Posté le 05-06-2001 à 20:51:46
mais ouais mais c'est ça la soluce !!!!!!! c'est pour pas grand chose, je sais pas si ça vaut le coup... enfin, j'apprendrai
Marsh Posté le 05-06-2001 à 21:07:16
Code :
|
j'crois que c pas bon mais on sait jamais
Marsh Posté le 05-06-2001 à 21:29:44
Bonjour
Je n'ai pas la solution mais regarde dans la doc de mysql il explique comment contourner le problème des select imbriqués
Marsh Posté le 05-06-2001 à 23:42:38
Resalut
Doc de mysql 3.23.36:
he following will not yet work in MySQL:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 where table1.id=table2.id);
However, in many cases you can rewrite the query without a sub-select:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
Si ca t'aide t'en mieux
mais bon courage
Marsh Posté le 06-06-2001 à 09:41:49
oui c'est bon avec ça et une table temporaire, je vais m'en sortir
Marsh Posté le 06-06-2001 à 09:45:49
zarbi ton pb... lolo tavais donné la soluce il me semble non ?
c koi ki clochait ?
Marsh Posté le 06-06-2001 à 09:55:30
ce qui clochait ? ben une faute lorsque j'ai refait la requête
je fais pas de copier/coller... j'essaye de refaire les trucs moi-même... voilà où ça me mène... à dire que ce que me propose les autres est faux... je suis si tant désolé...
meuua culle pas...
sorry...
'scuse ?
Marsh Posté le 06-06-2001 à 10:00:59
à 300 % !!!!!!
de plus il me smeblait avoir déjà essayé... bref... j'suis nul..
désolé..
Marsh Posté le 08-06-2001 à 14:21:36
encore une ??
INSERT INTO materiels VALUES ('', '$listesscat', '$listefab', '$nom_mat', '$date_fab', '$fiche_web', '$achat_web1', '$nom_img', '$note_glob', 'n')
le pb, c'est que ça n'insère rien du tout... un copain développeur a regardé, il ne voit rien de choquant.... et vous ???
sos... je pige plus là....
Marsh Posté le 08-06-2001 à 14:24:45
il te renvoie un message d'erreur pr te dire que la clé primaire '' existe déjà non ?
precise le nom de tes champs sauf celui de la clé primaire et vire la valeur '' que tu mettais
ca devrais l'faire
Marsh Posté le 08-06-2001 à 14:28:28
pas de msg d'erreur.. rien...
ma clé primaire est un champ auto-increment... le premier de la liste, c'est pour ça que je le renseigne pas...
le pb, c'est que :
INSERT INTO sscategories VALUES ('', '$listecat', '$nom_sscat')
et
INSERT INTO categories VALUES ('', '$nom_cat')
et bien d'autres fonctionnent.... j'ai compté, vérifié, j'ai bien le bon nombre de champs...
si je fais :
$last_id = mysql_insert_id();
echo "$last_id est l'id créé.";
j'ai bien 0.... alors que ça devrait être 2...
il n'y a donc bien rien qui s'insère....
Marsh Posté le 08-06-2001 à 15:19:43
j'ai trouvé !!!
comme je suis en test, j'ai pas rmpli tout les champs.... dont un qui est en clé... et comme il y a déjà un enregistrement dont ce champs est vide... ben il veux pas... je m'en suis rendu compte en essayant avec phpmyadmin :
erreur sur la clé 4.... je regarde quelle est la clé 4 dans ma table... et hop, je l'ai viré... et ça marche )
comme quoi faut mettre des clés que là où c'est strictement nécessaire
Marsh Posté le 08-06-2001 à 16:06:19
Popopopop (c)
Bon, pour ta première requête, je te conseille vivement d'utiliser les JOINTURES (comme il est expliqué dans l'extrait de la doc MySQL). Pourquoi? Bin là tu te débrouilles bien avec deux tables, quand il y en aura cinq, faire des IN sera nettement moins pratique.
Pour ta seconde requête (l'insertion) :
- une clé primaire ne devrait JAMAIS, AU GRAND JAMAIS être vide
- les champs auto-incrémentés, c'est bien mais fais gaffe aux "sauts" en cas de problème sur le serveur (par exemple, passer de 500 à 500000000500) (ne rigole pas, ça nous arrive)
- quand tu fais une insertion, il vaut mieux mettre la liste des champs insérés, même si ce n'est pas obligatoire, ça améliore la lisibilité.
A bientôt
Marsh Posté le 08-06-2001 à 16:09:15
Fred999 a écrit a écrit : Popopopop (c) Bon, pour ta première requête, je te conseille vivement d'utiliser les JOINTURES (comme il est expliqué dans l'extrait de la doc MySQL). Pourquoi? Bin là tu te débrouilles bien avec deux tables, quand il y en aura cinq, faire des IN sera nettement moins pratique. |
c''est pas seulement moins pratique, c'est aussi moins performant
Marsh Posté le 08-06-2001 à 16:11:27
Fred999 a écrit a écrit : Popopopop (c) Pour ta seconde requête (l'insertion) : - une clé primaire ne devrait JAMAIS, AU GRAND JAMAIS être vide |
c pourquoi je l'ai viré (la clé)
Elcap
Marsh Posté le 05-06-2001 à 18:44:00
Ca faisait longtemps hein ?? ;-)
bon, là ma requête est un peu plus compliquée.... le pb, c'est qu'il me renvoie toujours 0... il y a donc une erreur dans ma requête vu que ça devrait me renvoyer qqch
SELECT id_nomnote, nom_note FROM noms_notes WHERE noms_notes.id_cat in (SELECT id_cat from sscategories WHERE sscategories.id_sscat = '$listesscat')
et voilà
[edit]--Message édité par elcap--[/edit]