Faire un INSERT dans un select
orion999
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
toma_f_1 Messages postés 89 Date d'inscription Statut Membre Dernière intervention -
toma_f_1 Messages postés 89 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis actuellement en train de développer un système de maitre/esclave en php, le maitre gère la base de données dans la quel on fait des recherches et les esclaves explorent le web afin de trouver de nouvelles informations.
La communication ce fait sous forme de requête HTTP, l'esclave demande des liens à analyser, le maitre lui répond, une fois analyser l'esclave renvoie au maitre les résultat de ses analyses.
Les réponses sont en fait l'affichage direct des requêtes (le demandeur n'a plus qu'as directement les exécuter pour mettre à jour sa base de données).
Je stocke des mots clé dans une table sous cette forme:
Ensuite je fait une relation avec les urls analysée dans une autre table, de cette façon j'évite les redondances d'informations.
Le problème est que l'esclave ne sais pas si il est tomber sur un nouveau mot clé... je me suis donc dis faisons une petite condition... si le mot clé y est on chope son id... sinon on l'insère.
Cependant comme je l'ai dis, les requêtes sont générée chez l'esclave et le maitre les exécute bêtement... donc la condition dois pouvoir être mise directement dans la requête SQL.
Voila ce que j'ai pour le moment:
Sauf que comme vous vous en doutez certainement... j'ai droit à une jolie erreur de syntaxe
Comment faire pour arriver au résultat que je souhaite ?
Notons qu'il est possible de faire plusieurs requêtes (variables utilisateurs ?) cependant j'utilise mysql_query... (je ne sais pas si sa bride en quelques chose...
Merci d'avance pour votre aide, indication, ...
Cordialement, La source.
Je suis actuellement en train de développer un système de maitre/esclave en php, le maitre gère la base de données dans la quel on fait des recherches et les esclaves explorent le web afin de trouver de nouvelles informations.
La communication ce fait sous forme de requête HTTP, l'esclave demande des liens à analyser, le maitre lui répond, une fois analyser l'esclave renvoie au maitre les résultat de ses analyses.
Les réponses sont en fait l'affichage direct des requêtes (le demandeur n'a plus qu'as directement les exécuter pour mettre à jour sa base de données).
Je stocke des mots clé dans une table sous cette forme:
CREATE TABLE IF NOT EXISTS `keywords` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `keyword` varchar(128) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Ensuite je fait une relation avec les urls analysée dans une autre table, de cette façon j'évite les redondances d'informations.
Le problème est que l'esclave ne sais pas si il est tomber sur un nouveau mot clé... je me suis donc dis faisons une petite condition... si le mot clé y est on chope son id... sinon on l'insère.
Cependant comme je l'ai dis, les requêtes sont générée chez l'esclave et le maitre les exécute bêtement... donc la condition dois pouvoir être mise directement dans la requête SQL.
Voila ce que j'ai pour le moment:
INSERT INTO `url_keywords` ( `id_url`, `id_keyword` ) VALUES ( 68, ( SELECT CASE WHEN ( SELECT `id` FROM `keywords` WHERE `keyword` = "mot clé" ) <> "" THEN SELECT `id` FROM `keywords` WHERE `keyword` = "mot clé" ELSE INSERT INTO `keywords` ( `keyword` ) VALUES ( "mot clé" ) END ) );
Sauf que comme vous vous en doutez certainement... j'ai droit à une jolie erreur de syntaxe
Comment faire pour arriver au résultat que je souhaite ?
Notons qu'il est possible de faire plusieurs requêtes (variables utilisateurs ?) cependant j'utilise mysql_query... (je ne sais pas si sa bride en quelques chose...
Merci d'avance pour votre aide, indication, ...
Cordialement, La source.
A voir également:
- Faire un INSERT dans un select
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Touche insert sur clavier portable hp ✓ - Forum Clavier
- Reboot and select proper boot device or insert boot media in selected boot device and press a key ✓ - Forum PC portable
- &Quot;Reboot and Select proper Boot Device" - Forum Windows
2 réponses
Bonjour,
une manière élégante (et efficace) de résoudre ton problème est de faire appel aux procédures stockées. Cela te permet d'insérer des structures conditionnelles dans des requêtes sql.
Plus d'infos ici --> http://dev.mysql.com/doc/refman/5.0/fr/stored-procedure-syntax.html
Bon courage.
une manière élégante (et efficace) de résoudre ton problème est de faire appel aux procédures stockées. Cela te permet d'insérer des structures conditionnelles dans des requêtes sql.
Plus d'infos ici --> http://dev.mysql.com/doc/refman/5.0/fr/stored-procedure-syntax.html
Bon courage.
la référence pour moi en ce qui concerne la syntaxe SQL : http://sql.1keydata.com/fr/sql-insert-into.php
tu y trouveras notamment la syntaxe du insert into select.
pour ton cas, il est vrai qu'une procédure stockée serait plus simple.
en trois étapes :
avec une variable (@id_keywords)
1 : recuperer l'id de 'keywords'
2 : si nombre de lignes retournées = 0 faire un insert dans keywords et conserver l'id géneré dans une variable / sinon recuperer la valeur dans la variable
3 : enfin faire l'insert dans url_keywords en utilisant la variable
je pense pas que ce soit ce qu'il y ai de plus efficace mais si tu décomposes le problème, c'est plus simple à résoudre.
tu y trouveras notamment la syntaxe du insert into select.
pour ton cas, il est vrai qu'une procédure stockée serait plus simple.
en trois étapes :
avec une variable (@id_keywords)
1 : recuperer l'id de 'keywords'
2 : si nombre de lignes retournées = 0 faire un insert dans keywords et conserver l'id géneré dans une variable / sinon recuperer la valeur dans la variable
3 : enfin faire l'insert dans url_keywords en utilisant la variable
je pense pas que ce soit ce qu'il y ai de plus efficace mais si tu décomposes le problème, c'est plus simple à résoudre.