Vous n'êtes pas identifié(e).
Si la base de donnée se trouve sur le même serveur tu peux y accéder de cette manière :
SELECT ...
FROM base1.table1 INNER JOIN base2.table2 ON ...Si c'est sur une toute autre connexion par contre je ne sais pas...
Car les primitives de requêtes n'acceptent qu'une connexion, une solution pourrait être de faire le "join" en PHP.
Bonjour,
Je connais et "maîtrise" la méthode citée mais mon problème est différent, rajouter un INNER JOIN mais pour une base distante n'étant pas sur le même serveur ...
Dans l'attente de vos idée,
Anthony
Bonjour,
Je sais faire un INNER JOIN sur plusieurs tables dans la même base de donnée (MYSQL) mais j'aimerais savoir si il est possible de le faire en plus sur une base distante.
Faire une requête avec deux connexions en quelques sortes.
Merci à tous pour votre aide,
Anthony
Bonjour,
Votre débat m'échappe, vous êtes des pros !
J'ai donc remplacé
Ça à l'air de fonctionner même si la solution de Pierrot est également à retenir.
Merci beaucoup à tous, je pense que l'on peux dire que mon problème est résolu !
Vous êtes trop fort les gars, continuez comme ça ! Bravo et merci beaucoup
Antho
Bonjour,
Dans ce cas, comment faire alors ? Peut être
Qu'en pensez vous ?
Antho
Bonjour,
Il s'agit d'un datetime, dans ce cas précis comment faire ? Pourquoi cela n'est pas opérant ? peut être que le like ne fonctionne pas sur un champ datetime ?
Cela fonctionne parfaitement si la requête ne contient pas le INNER JOIN
Merci beaucoup
Antho
Bonjour,
Dans l'exemple, je n'ai pas fait d'inner join mais en gros la requête deviendrait :
Merci pour ta réponse :-)
Bonjour,
J'ai un soucis avec un code qui génère des fichiers xls :
include('connexion.php');
// Connexion MySQL
// la variable qui va contenir les données CSV
$outputCsv = '';
// Nom du fichier final
$fileName = 'produit_non_vendu.csv';
$month = $_POST['choix_mois'];
$DATE = date('Y-'.$month.'');
$requete = "SELECT CodeBarre,NumeroSerie,Etat,NumeroLivraison,ReferenceConstructeur FROM produits WHERE DateCreation LIKE '%$DATE%' AND Etat = 'ESTOCK' ORDER BY id";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) > 0)
{
$i = 0;
while($Row = mysql_fetch_assoc($sql))
{
$i++;
// Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
if($i == 1)
{
foreach($Row as $clef => $valeur)
$outputCsv .= trim($clef).';';
$outputCsv = rtrim($outputCsv, ';');
$outputCsv .= "\n";
}
// On parcours $Row et on ajout chaque valeur à cette ligne
foreach($Row as $clef => $valeur)
$outputCsv .= trim($valeur).';';
// Suppression du ; qui traine à la fin
$outputCsv = rtrim($outputCsv, ';');
// Saut de ligne
$outputCsv .= "\n";
}
}
else
// retour sur la page daccueil
exit('<meta http-equiv="refresh" content="0; url=../index.php?resultats=aucun" />');
// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
echo $outputCsv;
mysql_close($db);
exit();
?>
Avec une requête simple, j'obtiens mon résultat mais si je met un INNER JOIN, cela ne fonctionne pas. Quelqu'un pourrait m'en expliquer la raison ?
Merci beaucoup pour vos réponses,
Antho
Bonjour Maljuna et pardon pour le délais de réponse...
Voici le résultat du show demandé:
Sur table ancien stock:
CREATE TABLE `ancien_stock` (\n `id` int(16) NOT NULL auto_increment,\n `code_barre` int(15) NOT NULL default '0',\n `num_serie` varchar(255) NOT NULL default '0',\n `modele` varchar(150) NOT NULL default '',\n `pn_formex` varchar(100) NOT NULL default '',\n `numero_bl` varchar(150) NOT NULL default '',\n `date_reception` datetime NOT NULL default '0000-00-00 00:00:00',\n `date_creation` datetime NOT NULL default '0000-00-00 00:00:00',\n `id_fournisseur` int(16) NOT NULL default '0',\n `grade` char(1) NOT NULL default '',\n `etat` enum('ESTOCK','HSTOCK','REPAR') NOT NULL default 'ESTOCK',\n `contenu` varchar(200) NOT NULL default '',\n `remarque` mediumtext NOT NULL,\n `photo` varchar(150) NOT NULL default '',\n `PVHT` int(11) NOT NULL default '0',\n `typologie` enum('OCCAS','RECON','NEUF') NOT NULL default 'OCCAS',\n `diff_config` mediumtext NOT NULL,\n `date_expedition` datetime NOT NULL default '0000-00-00 00:00:00',\n `numero_be` varchar(150) NOT NULL default '',\n `id_fournisseur_expedition` int(10) NOT NULL default '0',\n UNIQUE KEY `num_serie` (`num_serie`),\n KEY `id` (`id`,`num_serie`,`numero_bl`,`id_fournisseur`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='TABLE DES ANCIENS PRODUITS'
Sur table nouveau_stock:
CREATE TABLE `laptopservice_inventaire` (\n `id` int(16) NOT NULL auto_increment,\n `id_produit` int(15) NOT NULL default '0',\n `etat` char(1) NOT NULL default '1',\n KEY `id` (`id`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='INVENTAIRE'
Merci pour ton aide
Antho
Bonjour à tous,
Je découvre les jointures Mysql, un vrai bonheur !
En fait, pour le moment, je n'utilise que INNER JOIN mais j'ai un souci.
Je voudrais comparer des résultats d'inventaires, j'ai dans la table "ancien_stock" les produits qui étaient en stocks avant l'ouverture de l'inventaire et dans l'autre table "nouveau_stock", les produits qui ont été effectivement comptés et donc ajoutés à cette table "nouveau_stock".
Comment puis-je comparer ces deux tables à la fin de l'inventaire pour afficher les écarts d'inventaires ? (exemple : le produit 125 était présent dans l'ancien stock mais pas dans le nouveau, merci de vérifier)
Si j'utilise INNER JOIN, je n'aurais aucun résultat puisque 125 n'a pas été trouvé dans le nouveau stock ...
Pourriez vous m'aidez sur ce point s'il vous plaît ?
Merci à tous,
Antho
Bonjour
Ha oui exact je ne maîtrise pas trop les tableaux de ce type mais je vais essayer en tentant au maximum de réduire la requête parce qu'il risque d'y avoir plusieurs milliers de résultats si je la fait sans conditions bien précises.
Merci bien.
PS: Si quelqu'un a une autre idée ... :-)
Antho
Bonjour
Merci pour ta réponse.
Il s'agit d'un récapitulatif de panier pour passer une commande, enfin plutôt établir un devis, je suis donc obligé de tout mettre sur la même page.
Est ce que quelqu'un a une idée à ce sujet ?
Merci
Antho
Bonjour
Je souhaiterais savoir si il était possible, correct de faire une boucle while dans une boucle for (j'ai peur de boucler à l'infinie et planter mysql) ...
Je parcours un tableau avec for de cette façon :
mais je voudrais aller chercher dans ma base les informations de getLabelByPosition($i) qui est en fait l'ID du produit, un peu de cette façon :
est ce que cela est raisonnable, y a t-il une autre solution pour ne pas charger mysql (j'avoue ne même pas avoir essayé par peur) ?
Merci à tous
Antho
Bonjour
Voila, en ajoutant
Cela fonctionne (avec r pour lire le fichier )
Merci à tous
Bonjour,
Désolé Alnoss et Jc, mais sur ce coup là, vous êtes bien a coté du problème
Mais le pense que Anthotill aussi un peu
Donc en résumé, le but c'est d'importer un csv dans une bdd. Donc en effet, on écris dans la bdd, pas dans un fichier.
Anthotill, tu dois comprendre que pour faire cet import, le fichier doit être sur le serveur qui execute le php.
Cela veut dire que soit tu as php sur ta propre machine, et dans ce cas la partie qui utilise les controles d'upload d'un fichier sont inutiles, il faut juste faire une lecture du fichier, soit tu fait un upload du fichier sur le serveur qui execute php (via un formulaire je suppose), et dans ce cas, il faut que tu finalise l'upload avant de pouvoir le lire (sur un serveur normalement configuré, tu ne peux pas lire le fichier temporaire directement).
Une fois le fichier uploadé correctement, tu pourra le lire, l'importer en bdd comme ton script veut le faire, et le supprimer si tu veux.
Alnoss, je ne sais pas comment tu fais un upload, mais si c'est a coup de fopen, heuuuu, je vais te demander de relire la doc php aussi
Et pour la doc des droits d'accès des groupes, heuuu, wai, on peut faire un upload sans la lire
@+
Merci beaucoup c'est toi qui a compris.
Je pensais que l'on pouvait le faire sans uploader le fichier, je vais donc uploader le fichier avant de le traiter.
Merci
Bonjour
Je ne veux pas uploader, je veux lire et insérer le fichier sans le déposer sur le FTP, est ce que cela te paraît plus clair ? Mon idée c'est de ne pas télécharger le fichier sur le serveur mais juste de le lire depuis le poste client est de l'enregistrer dans la base directement.
Donc si j'ai bien compris ton explication, j'ai besoin de lire le contenu du fichier local (A) et insérer directement les valeurs dans la base sans passé par le fameux fichier distant.
Merci beaucoup pour tes explications.
Antho
as-tu lu la documentation ???
Si le fichier existe, et que tu veux écrire dedans, alors c'est R+ (et pas R)
Si le fichier existe, et que tu veux le vider avant d'écrire dedans, alors c'est W+
VAS LIRE LA DOC !!!
Ma demande n'a rien avoir avec écrire dans un fichier mais importer un fichier dans le but de l'insérer dans une BDD (donc uniquement le lire). Le problème est que lorsque j'importe via mon formulaire le fichier le script répond que le fichier est introuvable.
Bonjour,
Première phrase des mesures de régulation...
Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
Premier et dernier avertissement.
@+
Désolé je ne peux pas le modifier. [NdM] Titre modifié
Salut,
Ton fopen est en paramètre " R " alors qu'il devrait être en " x "+ --> documentation
Cela ne fonctionne pas, le paramètre R est pour ouvrir le fichier en lecture, même avec le X cela ne fonctionne pas désolé, avez vous une autre idée ?
Cordialement
Bonjour
J'ai un soucis pour lequel je me tire les cheveux ! j'essaye d'uploader puis importer sous sql un fichier csv mais mon script me répond que le fichier n'existe pas, voici mon code :
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type csv...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop volumineux pour être traité en une seule fois (2048Mo maximum) ...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
/* On ouvre le fichier à importer en lecture seulement */
if (file_exists($fichier))
$fp = fopen('$fichier', 'r');
else
{ /* le fichier n'existe pas */
echo "Fichier introuvable !<br>Importation stoppée.";
exit();
}
while (!feof($fp)) /* Et Hop on importe */
{ /* Tant qu'on n'atteint pas la fin du fichier */
$ligne = fgets($fp,4096); /* On lit une ligne */
/* On récupére les champs séparés par ; dans liste*/
$liste = explode( ";",$ligne);
/* On assigne les variables */
$cat = $liste[0];
$pn = $liste[1];
$marque = $liste[2];
$modele = $liste[3];
$processeur = $liste[4];
$config_memoire = $liste[5];
$config_disquedur = $liste[6];
$config_lecteur = $liste[7];
$carte_graphique = $liste[8];
$taille_ecran = $liste[9];
$systeme = $liste[10];
$pvuht = $liste[11];
$date_ajout = $liste[12];
/* Ajouter un nouvel enregistrement dans la table */
$query = "INSERT IGNORE INTO z_partnumber_config (id,cat,pn,marque,modele,processeur,config_memoire,config_disquedur,config_lecteur,carte_graphique,taille_ecran,systeme,pvuht,date_ajout)
VALUES('','$cat','$pn','$marque','$modele','$processeur','$config_memoire','$config_disquedur','$config_lecteur','$carte_graphique','$taille_ecran','$systeme','$pvuht',NOW())";
$result= mysql_query($query);
if(mysql_error())
{ /* Erreur dans la base de donnees */
echo 'Erreur dans la base de données : '.mysql_error().'';
echo '<br>Importation stoppée';
exit();
}
Est ce que quelqu'un peut m'éclairer sur la question, pourquoi le fichier est inexistant alors que je l'importe bien (j'ai essayé de changer le nom du fichier, le chmod des dossiers du script mais rien n'y fait) j'ai pourtant déjà utilisez ce script avant mais la il ne fonctionne plus :'(
Merci à vous, bonne journée
Je ne sais pas ce que tu traites comme données donc je suis parti sur le principe que tu insérais plusieurs enregistrements.
Si une erreur survient lors du 5eme les suivants ne seront pas fait, mais les 4 premiers seront dans la bdd.
Ok je comprend, il faut donc que j'utilise REPLACE ou IGNORE suivant les cas d'après la doc sql. Merci pour votre aide mon problème est résolu
Il y a des fonctions pour retourner les codes d'erreur. mysql_error() par exemple, mais il y en a aussi une pour le numéro de l'erreur.
Tu peux donc personnaliser les messages suivant leur numéro.
Cependant lors d'une erreur le traitement mysql s'arrête mais il n'efface pas ce qui a déjà été fait.
Bonjour
Je ne comprend pas trop ce que tu veux dire en disant "Cependant lors d'une erreur le traitement mysql s'arrête mais il n'efface pas ce qui a déjà été fait." ? A partir du moment ou mon champ est en unique, si mysql a rempli ce qu'il avait à remplir ce n'est pas grave (j'ai peut être mal compris) ?
Merci
Bonjour
J'aimerais que l'utilisateur ai un message comme quoi l'insertion s'est bien déroulée ou quelque chose qui remplace le message de base de mysql DUPLICATE ENTREY etc ...
Merci pour ta réponse
Antho
Bonjour à tous
Je souhaiterais savoir si il est possible de gérer les erreurs d'insertion de donnée dans une BDD MYSQL, je m'explique:
J'ai un script qui envoi des fichier CSV (;) dans mysql, j'ai un champ qui en unique donc si l'on essaye d'importer deux fois la même valeur ce n'est pas possible mysql renvoi cette erreur : Duplicate entry 'ma valeur' for key 1 normal
Est ce qu'il est possible de dire en php quelque chose du genre if($mysql_error == 'Duplicate entry') { echo 'Vous ne pouvez pas envoyer deux fois la même valeur'; } else { echo mysql_error(); }
Merci pour vos réponses
Antho
VOIR LE MESSAGE POSTE PAR MOI MEME SAAD207 IL YA LE FORMULAIRE LE SCRIPT POUR INSERER
Je ne vois pas ou ?
Il te faut faire trois requêtes update. ^^
Oui mais comment récupérer les 3 ID pour faire trois requête à la suite ?
Bonjour
J'ai bien compris mais comment faire alors ?
Antho