gabyte
Messages postés10Date d'inscriptionmercredi 3 novembre 2010StatutMembreDernière intervention 8 décembre 2010
-
21 nov. 2010 à 11:41
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 2011
-
22 nov. 2010 à 09:37
Bonjour,
Je veux faire plusieurs actions en une seule requête. Si je passe par MySql (pour tester), cela fonctionne :
---dans MyQsl----------
TRUNCATE TABLE `VIRTUEL`;
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc1` FROM `SOURCE` WHERE `s_mc1`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc2` FROM `SOURCE` WHERE `s_mc2`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc3` FROM `SOURCE` WHERE `s_mc3`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc4` FROM `SOURCE` WHERE `s_mc4`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc5` FROM `SOURCE` WHERE `s_mc5`!=''
----------------------------
Mais lorsque je fais une requête dans php -
----- dans php ----------
mysql_select_db($base, $fichier);
$query_Rch =
"TRUNCATE TABLE VIRTUEL;INSERT INTO VIRTUEL(id_virtuel,motclef) SELECT s_id, s_mc1 FROM SOURCE WHERE s_mc1!='';INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc2` FROM `SOURCE` WHERE `s_mc2`!='';INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc3` FROM `SOURCE` WHERE `s_mc3`!='';INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc4` FROM `SOURCE` WHERE `s_mc4`!='';INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc5` FROM `SOURCE` WHERE `s_mc5`!=''";
you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO VIRTUEL(id_virtuel,motclef) SELECT s_id, s_mc1 FROM SOURCE WHERE s_m' at line 1
cod57
Messages postés1654Date d'inscriptiondimanche 7 septembre 2008StatutMembreDernière intervention11 septembre 201319 21 nov. 2010 à 12:02
BONJOUR
essaye voir ça
----- dans php ----------
mysql_select_db($base, $fichier);
$query_Rch =
"
TRUNCATE TABLE `VIRTUEL`;
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc1` FROM `SOURCE` WHERE `s_mc1`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc2` FROM `SOURCE` WHERE `s_mc2`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc3` FROM `SOURCE` WHERE `s_mc3`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc4` FROM `SOURCE` WHERE `s_mc4`!='';
INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc5` FROM `SOURCE` WHERE `s_mc5`!=''
";
gabyte
Messages postés10Date d'inscriptionmercredi 3 novembre 2010StatutMembreDernière intervention 8 décembre 2010 21 nov. 2010 à 12:55
Je me doutais un peu qu'une seule requête ne soit la règle
Avez-vous une idée du contournement de cette limite?
j'ai trouvé cela tout à l'heure sur le forum :
------- début -------
$sql = "INSERT INTO membres (pseudo,pass,email,nom,prenom,ville,dtnaissance,avatar,siteweb,aim,mmsn)
VALUES('$pseudo','$pass','$email','$nom','$prenom','$ville','$dtnaissance','$avatar','$siteweb','$aim','$mmsn')";
mysql_query($sql);
$sql = "INSERT INTO chat (pseudo) VALUES('$pseudo')";
mysql_query($sql);
-------- fin ----------
croyez-vous que je puisse faire cela du type :
----début exemple ------
$sql = "TRUNCATE TABLE `VIRTUEL`";
mysql_query($sql);
$sql = "INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc1` FROM `SOURCE` WHERE `s_mc1`!=''";
mysql_query($sql);
$sql = "INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc2` FROM `SOURCE` WHERE `s_mc2`!=''";
mysql_query($sql);
$sql = "INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc3` FROM `SOURCE` WHERE `s_mc3`!=''";
mysql_query($sql);
$sql = "INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc4` FROM `SOURCE` WHERE `s_mc4`!=''";
mysql_query($sql);
$sql = "INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc5` FROM `SOURCE` WHERE `s_mc5`!=''";
kohntark
Messages postés3706Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 21 nov. 2010 à 13:24
Je réponds vite fait, je dois partir.
Pour commencer abandonne les fonctions mysql_*() qui sont obsolètes, dirige toi plutôt vers mysqli*(), ou mieux, PDO.
Ca ne changera pas des masses la donne concernant ton "problème" (qui n'en est pas un)
A vue de nez, oui, tu peux procéder ainsi, mais pour plus de facilité de lecture et donc de simplicité tu pourrai grouper tes requêtes dans un tableau et faire un foreach dessus :
$aReqSQL = array(
'TRUNCATE TABLE `VIRTUEL`',
'NSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc1` FROM `SOURCE` WHERE `s_mc1`!=\'\'',
[...]
);
foreach($aReqSQL as $req) {
mysql_query($req);
}
C'est juste pour poser l'idée, ça ne tiens pas compte de ce que je disais avant, de la gestion des erreurs, de la sécurité, ...
Cordialement,
Kohntark -
Vous n’avez pas trouvé la réponse que vous recherchez ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 21 nov. 2010 à 14:28
Salut,
Ca change quand même que PDO est capable d'envoyer plusieurs requêtes et retourne les résultats des requêtes dans un ResultSet, chaque résultat étant accessible séparément.
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
gabyte
Messages postés10Date d'inscriptionmercredi 3 novembre 2010StatutMembreDernière intervention 8 décembre 2010 21 nov. 2010 à 17:54
et bien j'ai donc trouvé la méthode et appris pas mal de choses merci donc
Voici ce qui fonctionne :
--------- début ---------------
mysql_select_db($mabase, $fichier);
$aReqSQL = array(
'TRUNCATE TABLE `VIRTUEL`',
'INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc1` FROM `SOURCE` WHERE `s_mc1`!=\'\'',
'INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc2` FROM `SOURCE` WHERE `s_mc2`!=\'\'',
'INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc3` FROM `SOURCE` WHERE `s_mc3`!=\'\'',
'INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc4` FROM `SOURCE` WHERE `s_mc4`!=\'\'',
'INSERT INTO VIRTUEL(`id_virtuel`,`motclef`) SELECT `s_id`,`s_mc5` FROM `SOURCE` WHERE `s_mc5`!=\'\'');
foreach($aReqSQL as $req) {
$Rch = mysql_query($req, $fichier) or die(mysql_error());
$row_Rch = mysql_fetch_assoc($Rch);
$totalRows_Rch = mysql_num_rows($Rch);
}
---------- fin -------------
merci donc chers comparses
Gabyte - Angers
------------------
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 22 nov. 2010 à 08:01
Mysqli peut faire des requetes multiples. A trouver dans la doc (genre multi_query).
après est-ce vraiment utile quand on peut appeler les requetes les unes après les autres..
S.