begin process at 2012 05 31 15:02:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

2 requêtes SQL dans une autre requête.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

2 requêtes SQL dans une autre requête.

mercredi 29 septembre 2010 à 09:52:06 | 2 requêtes SQL dans une autre requête.

gnut

Bonjour,
Voilà j'ai fait un script qui me permet de passer des données XML vers une Table (annonces) de ma BDD. Celui-ci fonctionnait très bien mais je dois ajouter 2 INSERT SQL comprenant chacun 2 SELECT SQL vers une autre Table (valeurs). Et bien sûr si je vous fais appel c'est que ça ne fonctionne pas tel que je l'ai fait .

Code PHP :

<?php
/// ligne 220 testée OK

mysql_query("INSERT INTO annonces (ref_annonce_client, 	id_reg, 	id_dep, 	id_cat, 	email, 	password, 	ville, 	code_pos, 	status, 	soc_nom, 	soc_siren, 	type, 	nom, 	tel, 	titre, 	radio, 	ann, 	prix, 	Kilométrage, 	Année_Modéle, 	Cylindrée, 	Surface, 	Piéces, 	Capacité, 	random_code, 	confirm, 	valid, 	date, 	tel_cache, 	ip, url_pho1, url_pho2 ,url_pho3 , url_pho4, url_pho5 )VALUES('$ref', 	'$re', 	LEFT('$de',2), 	'$Typeann', 	'$mail ', 	'$password', 	'$vil', 	'$cod', 	'$sta', 	'$nom', 	'', 	'1', 	'$nom', 	'$telag', 	'$titre', 	'$ra', 	'$desc', 	'$pri', 	'', 	'', 	'', 	'$surf', 	'$nbpiece', 	'', 	'$rand', 	'$conf', 	'$val', 	'$time', 	'N', 	'$ipadresse', '$pho1', '$pho2', '$pho3', '$pho4', '$pho5')");

/// > ligne 222 problème

mysql_query("INSERT INTO valeurs (id_for, id_ann, val_for ) VALUES ( 'mysql_query("SELECT id_for FROM form WHERE id_cat='$Typeann' ORDER BY id_for")', 'mysql_query("SELECT id_ann FROM annonces WHERE ref_annonce_client='$ref'")', '$surf' )");


/// > ligne 224 problème aussi certainement

mysql_query("INSERT INTO valeurs (id_for, id_ann, val_for ) VALUES ( 'mysql_query("SELECT id_for FROM form WHERE id_cat='$Typeann' ORDER BY id_for DESC")', 'mysql_query("SELECT id_ann FROM annonces WHERE ref_annonce_client='$ref'")', '$nbpiece' )")


or die("Erreur MySQL : ".mysql_error());

?>


Resultat :
Parse error: syntax error, unexpected T_STRING in /homez.194/touslesb/www/admin/insertannonces.php5 on line 222
mercredi 29 septembre 2010 à 10:38:20 | Re : 2 requêtes SQL dans une autre requête.

neigedhiver


Salut,

Tu mélanges PHP et MySQL : dans une requête SQL, tu ne peux pas utiliser de PHP : mysql_query n'est pas une fonction MySQL, donc, interdite.
Il suffit de laisser la deuxième requête remplir les valeurs, le moteur de MySQL sait très bien gérer ça. Sauf que toi, tu voudrais récupérer des données de plusieurs tables... Il faut pour cela que les tables soient liées d'une manière ou d'une autre : il faut que tu puisses associer à un enregistrement de l'une, un enregistrement de l'autre, car tu ne peux pas effectuer une requête SQL par valeur à insérer. Tu ne peux qu'avoir une requête SQL qui récupère toutes les valeurs à insérer.

Là, j'ai beau regarder ce que tu veux faire, j'ai du mal à te proposer une solution, parce que je ne sais pas à quoi ressemblent les tables concernées, ni à quoi correspondent les champs... Donc... Soit tu as compris ce que je te dis et tu arrives à te dépatouiller tout seul, soit tu donnes plus d'informations pour que je puisse te donner une meilleure réponse ;)

Par ailleurs, je t'invite à indenter tes requêtes SQL dans ton code, tu verras, c'est quand même plus clair (et MySQL, tout comme PHP, se fout pas mal des espaces et tabulations en plus).

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
mercredi 29 septembre 2010 à 15:54:25 | Re : 2 requêtes SQL dans une autre requête.

gnut

alors j'ai refait:

Code PHP :
<?php
mysql_query("INSERT INTO annonces (ref_annonce_client,     id_reg,     id_dep,     id_cat,     email,     password,     ville,     code_pos,     status,     soc_nom,     soc_siren,     type,     nom,     tel,     titre,     radio,     ann,     prix,     Kilométrage,     Année_Modéle,     Cylindrée,     Surface,     Piéces,     Capacité,     random_code,     confirm,     valid,     date,     tel_cache,     ip, url_pho1, url_pho2 ,url_pho3 , url_pho4, url_pho5 )VALUES('$ref',     '$re',     LEFT('$de',2),     '$Typeann',     '$mail ',     '$password',     '$vil',     '$cod',     '$sta',     '$nom',     '',     '1',     '$nom',     '$telag',     '$titre',     '$ra',     '$desc',     '$pri',     '',     '',     '',     '$surf',     '$nbpiece',     '',     '$rand',     '$conf',     '$val',     '$time',     'N',     '$ipadresse', '$pho1', '$pho2', '$pho3', '$pho4', '$pho5')");


$sql1 = "SELECT id_for FROM form WHERE id_cat='$Typeann' ORDER BY id_for";
$sql2 = "SELECT id_ann FROM annonces WHERE ref_annonce_client='$ref'";
$sql3 = "SELECT id_for FROM form WHERE id_cat='$Typeann' ORDER BY id_for DESC";

$query1 = @mysql_query($sql1);
$query2 = @mysql_query($sql2);
$query3 = @mysql_query($sql3);

$id_for1 = result_to_array($query1);
$id_annform = result_to_array($query2);
$id_for2 = result_to_array($query3);


mysql_query("INSERT INTO valeurs (id_val, id_for, id_ann, val_for ) VALUES ( '', '$id_for1', '$id_annform', '$surf' )");

mysql_query("INSERT INTO valeurs (id_val, id_for, id_ann, val_for ) VALUES ( '', '$id_for2', '$id_annform', '$nbpiece' )")

or die("Erreur MySQL : ".mysql_error());


var_dump($id_for1[0]);
echo $id_for1;
print "<br>";

var_dump($id_annform[0]);
echo $id_annform;
print "<br>";

var_dump($id_for2[0]);
echo $id_for2;
print "<br><br><hr>";

?>


les "echo" donnent les bons résultats mais les INSERT ne se font pas.
mercredi 29 septembre 2010 à 17:28:17 | Re : 2 requêtes SQL dans une autre requête.

neigedhiver


Je ne sais toujours pas à quoi ressemble ta base de données.
Et maintenant, tu utilises une fonction result_to_array() que je ne connais pas, je ne sais donc pas ce qu'elle retourne... Et tu n'indiques pas le résultat des var_dump().

Bref, je peux pas t'aider plus...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
jeudi 30 septembre 2010 à 12:39:21 | Re : 2 requêtes SQL dans une autre requête.

gnut

Pourquoi j'obtiens ça ( fichier : string(1) "." ) avec ça :

Code PHP :
            

$dir= "/homez.194/touslesb/www/ftpclient/wizzimmo";
            $dh = opendir($dir);
            while ($file = readdir($dh))
            {



echo "fichier : "; var_dump($file);

jeudi 30 septembre 2010 à 13:51:57 | Re : 2 requêtes SQL dans une autre requête.

neigedhiver


Parce que $file est une chaîne de caractères de longueur 1.
Lis la doc des fonctions readdir() et var_dump()...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
jeudi 30 septembre 2010 à 14:54:53 | Re : 2 requêtes SQL dans une autre requête.

gnut

En fait il me trouve un fichier . puis un .. puis mes fichiers (exemple.xml,... donc ceux-là sont bons).
Mais bien sûr si je veux traiter les fichiers je ne dois pas avoir les deux premiers . et ..

Je comprends pas là, j'ai regardé la doc mais...

merci neige.
vendredi 1 octobre 2010 à 10:54:15 | Re : 2 requêtes SQL dans une autre requête.

Lyle56


C'est les fichiers "standards"

Dans tout les dossier tu à les fichier "." et ".."

Dans une fenêtre dos place toi sur un répertoire et fait cd ..
Tu verra alors le résultats ;)

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
vendredi 1 octobre 2010 à 11:10:50 | Re : 2 requêtes SQL dans une autre requête.

neigedhiver

Salut,

Ce n'est plus ton problème de départ...
Pour info, cette ligne est archi fausse :
Code PHP :
while ($file = readdir($dh))

J'en ai marre de répéter ça sans cesse, mais bon sang, personne ne lit jamais la doc ?
"Doc PHP" a écrit

Cette fonction peut retourner FALSE, mais elle peut aussi retourner une valeur équivalent à FALSE comme 0 ou "". Veuillez lire la section sur les booléens pour plus d'informations. Utilisez l'opérateur === pour tester la valeur de retour exacte de cette fonction.


C'est écrit dans un gros cadre rouge. Et le premier exemple donné pour cette fonction :
Code PHP :
    /* Ceci est la façon correcte de traverser un dossier. */
    while (false !== ($file = readdir($handle))) {
        echo "$file\n";
    }

    /* Ceci est la MAUVAISE façon de traverser un dossier. */
    while ($file = readdir($handle)) {
        echo "$file\n";
    }

Mais bon, t'es pas le seul à faire cette erreur, je me demande simplement pourquoi tant de personnes la font... Vous apprenez PHP comment ? La doc ne sert donc à personne ? Elle est pourtant plus juste que les tutos trouvés ici ou là...

Bref, il suffit de vérifier que le nom du fichier est différent de '.' et '..'

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
vendredi 1 octobre 2010 à 15:58:44 | Re : 2 requêtes SQL dans une autre requête.

gnut


Merci, j'ai découvert ça entre temps.
Enfin voilà ce qu'il me fallait pour lire les fichiers après les . et .. , je ne connaissais pas cette méthode " $count=0; if(...){$count++ }; " et la doc est très bien mais parfois complexe pour les débutants :

Code PHP :
<?php

$dir = "/homez..../.../.../.../dossier";
			
if($dh = opendir($dir))
{
$count=0;						
while (false !== ($file = readdir($dh)))
{
			
if ($file != "." && $file != ".."){$count++;

$adressefile = $dir."/".$file;



////votre script en utilisant "$file" pour appeler vos fichiers


}}

}
			closedir($dh);

?>




Cette discussion est classée dans : mysql, select, id, query, for


Répondre à ce message

Sujets en rapport avec ce message

## Où est l'erreur ???? bon diou !! [ par kodiask ] voila dite moi pourkoi lorsque je met le code la, il n'y a rien ki saffiche ? (c un système de citation aléatoire)mysql_select_db('cit_tbl',$db); $que sil vou plé où est l'erreur ? [ par kodiask ] voilà g fai un système de citation au hazard et kanje met le code là il maffiche rien du tout , pourkoi ? merci ....mysql_select_db('cit_tbl',$db); $q Ma Bdd 'clignote'... Fonctionne, fonctionne pas... [ par larrieu ] Bonjour,Je suis un peu dépassé...Ma bdd sur mysql comprend une table annonce, des champs idannonce, sujet, message, pseudo (de l'auteur),mail (de l'au Up-load de 2 photos [ par jaco13 ] Bonjour!Voici le code de la page "ajoutvehicule1.inc.php" d'un site de voitures. La partie en noire est la partie avec la requête qui sert à insérer u pb : Afficher le nombre de commentaire [ par punkcity ] Bonjour, J'ai un petit (enfin un gros depuis le temps ou je suis dessus) problème. J'ai réalisé une page dynamique ou je recupere des info d'une table Problème checkbox sur liste dynamique [ par ] Bonjour, je suis bloqué sur un script, pourriez vous m'aider svp. j'ai une page choiximp.php qui extrait de ma base etiquettes table produits donc requete sql assez complexe [ par sebmaster001 ] bonjour à tous, je ne suis pas habitué à poster pour demander de l'aide, mais la, le temps presse... je vous remercie donc d'avance de l'aide que v problème avec doublon dans ma classe de base de donnée [ par Dyr3e ] bonjour, j'ai un problème de Doublon avec la classe pour les base de donnée que j'utilise. Je n'arrive pas a trouver d'ou cela viens mais j'obtiens su Qqun voit un probleme dans ces lignes ? [ par Teclis01 ] Voici le probleme: il m affiche que le premier nom correspondant a un id et les suivant non!Dans le tableau, j ai:-toutes les id-tous les recipients-A Problème de MySQL -> auto-incrément et select derniere valeur d'une colonne [ par jcheseaux ] Bonjour ! Je suis débutant en communication PhP MySQL mais j'apprend vite :-) mias la je sèche un peu alors j'espère que vous pourrez répondres à mes


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,388 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales