Accés SPIP aux tables non-SPIP et jointures - commentairesAccés SPIP aux tables externes et jointures2014-04-27T21:09:57Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4751382014-04-27T21:09:57Z<p>Bonjour<br class="autobr">
Je n'arrive pas à reproduire l'exemple des pommes ...<br class="autobr">
Sous spip 3, j'ai un fichier config/mes_options.php avec</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>$tables_principales['pommes']['field']['variete']= "varchar(10)";
$tables_principales['pommes']['key']['PRIMARY KEY']= "variete"; $tables_principales['gardiens']['field']['id_gardien']= "int auto_increment";
$tables_principales['gardiens']['field']['nom']= "varchar(10)";
$tables_principales['gardiens']['field']['prenom']= "varchar(10)";
....
$tables_principales['gardiens']['key']['PRIMARY KEY']= "id_gardien";</code></pre></div>
<p>et les tables qui vont bien, et la boucle :</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><BOUCLE_trouve(pommes gardiens){variete}>
La pomme #VARIETE est gardée par #NOM #PRENOM
</BOUCLE_trouve></code></pre></div>
<p>me répond :</p>
<blockquote class="spip">
<p>Erreur SQL 1054<br class="autobr">
Champ 'pommes.id_gardien' inconnu dans on clause<br class="autobr">
SELECT pommes.variete, L1.nom, L1.prenom FROM pommes AS <code class="spip_code spip_code_inline" dir="ltr">pommes</code> INNER JOIN gardiens AS L1 ON ( L1.id_gardien = pommes.id_gardien ) WHERE (pommes.variete = NULL)</p>
</blockquote>
<p>et je ne comprends pas ...</p>Accés SPIP aux tables externes et jointures2011-04-16T09:24:13Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4444152011-04-16T09:24:13Z<p>C'est fait Sévero, j'ai intégré ta proposition d'amélioration en la développant un peu avec notamment un lien vers ton nouvel article. Cette doc est une belle issue je trouve après tes difficultés avec les jointures. :-)</p>Accés SPIP aux tables externes et jointures2011-04-14T21:48:51Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4443532011-04-14T21:48:51Z<p>Salut,</p>
<p>il faudrait sûrement revoir un peu le paragraphe « $table_des_jointures » pour deux raisons :<br class="autobr"> * la table s'appelle $tables_jointures (<a href="http://programmer.spip.org/Declarations-de-jointures" class="spip_url spip_out auto" rel="nofollow external">http://programmer.spip.org/Declarations-de-jointures</a>)<br class="autobr"> * pour afficher la balise #CHAMP_TABLE_2, il faut forcer la jointure, par (TABLE1 spip_table2)... (dernier paragraphe de <a href="http://programmer.spip.org/Forcer-des-jointures" class="spip_url spip_out auto" rel="nofollow external">http://programmer.spip.org/Forcer-des-jointures</a>)</p>
<p>Du coup, le paragraphe serait plutôt quelque chose comme :</p>
<blockquote class="spip">
<p><strong><a href="http://programmer.spip.org/Declarations-de-jointures" class="spip_out" rel='nofollow external'>$tables_jointures</a> :</strong></p>
<p>Sert à SPIP pour relier automatiquement 2 tables, ce qui fait que si on fait une boucle</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><boucle_bb(TABLE1){champ_table2}> ...
</boucle_bb></code></pre></div>
<p>SPIP fera la liaison entre les 2 tables, à condition évidemment qu'elles aient une colonne de nom identique, par exemple « id_rubrique » toutes les deux.</p>
<p>Attention, la jointure automatique fonctionne seulement pour les critères. Pour utiliser les champs de la table 2 comme balises, il faut <a href="http://programmer.spip.org/Forcer-des-jointures" class="spip_out" rel='nofollow external'>forcer la jointure</a> :</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><boucle_bb(TABLE1 spip_table2)> #CHAMP_TABLE2
</boucle_bb></code></pre></div></blockquote>Accés SPIP aux tables externes et jointures2010-01-11T11:03:58Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4250162010-01-11T11:03:58Z<p>oulala, il n'y a pas vraiment de raison de rester avec une aussi vieille version<small class="fine d-inline"> </small>!</p>Accés SPIP aux tables externes et jointures2010-01-11T09:54:36Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4250122010-01-11T09:54:36Z<p>Bonjour,</p>
<p>J'utilise une ancienne version de spip 1.8.2 et j'essaie de lier mes tables externes à spip hélas sans succès.</p>
<p>J'ai déclaré ma nouvelle table dans un nouveau fichier php3, ma table est ajoutée à la variable table_des_tables.</p>
<p>Néanmoins lorsque j'essaie de faire une boucle sur cette table j'ai une erreur :</p>
<p>Erreur(s) dans le squelette</p>
<p>(ag_vl)<br class="autobr">
Erreur MySQL<br class="autobr">
SELECT mytable. FROM mytable AS mytable<br class="autobr">
Erreur de syntaxe près de 'FROM mytable AS mytable' à la ligne 2<br class="autobr"> ,</p>
<p>Est-ce que pour cette version d'autres étapes sont nécessaires<small class="fine d-inline"> </small>?</p>
<p>Merci.</p>Accés SPIP aux tables externes et jointures2009-05-11T15:47:52Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4162332009-05-11T15:47:52Z<p>Hello,</p>
<p>Si la table externe s'appelle ma_table (sans s donc), et qu'on la declare comme cela : <br class="manualbr">$tables[ma_table][titre]=1<small class="fine d-inline"> </small>;</p>
<p>on va obtenir une erreur de requet sur ma_tables (spip rajoute le s tout seul a priori). Donc, la bonne declaration devient <br class="manualbr">$tables[ma_tables][titre]=1<small class="fine d-inline"> </small>;</p>
<p>avec un s cette fois ci que spip retirera lui meme. Il semble également que les tables supplémentaires que l'on souhaite indexer doivent avoir au moins 1 index</p>
<p>Chag</p>Warning : relation « spip_meta » does not exist2009-05-05T14:17:31Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4160432009-05-05T14:17:31Z<p>Bon, j'ai trouvé la solution à mon problème.</p>
<p>Le truc, c'est que comme la base à laquelle je voulais acceder était sur une autre machine, et que la machine sur laquelle était hébergée la base spip n'avait pas de base postgresql, le fichier d'install (inc/install.php) ne me proposait pas de choisir entre différents types de bd (mysql versus postgresql).</p>
<p>Du coup, j'avais écris un fichier de connection à la main en patchant celui généré par spip (nommé connect.php). Et manifestement, il n'était pas tout à fait bon.</p>
<p>Donc, à grand coup de hache, et de positionnement de variables en dur dans install.php et pg.php, j'ai finalement réussit à lui faire me générer un fichier de connection propre. Et la seule différence était l'absence de la ligne :</p>
<p> $GLOBALS['spip_connect_version'] = 0.7<small class="fine d-inline"> </small>;</p>
<p>Une fois enlevé cette instruction de mon fichier de connection, plus de Warning disgracieux.<br class="autobr">
Vous savez quoi, je suis content.</p>Warning : relation « spip_meta » does not exist2009-04-30T07:39:24Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4158902009-04-30T07:39:24Z<p>Non, en fait, la machine sur laquelle tourne le serveur internet est en 8.3.7...</p>Warning : relation « spip_meta » does not exist2009-04-29T15:57:30Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4158712009-04-29T15:57:30Z<p>Bonjour,</p>
<p>J'interroge depuis une boucle spip une base postgres externe. Tout marche nickel, à part qu'il m'affiche un warning disgracieux :<br class="autobr"> «<small class="fine d-inline"> </small>Warning : pg_query() [function.pg-query] : Query failed : ERROR : relation "spip_meta" does not exist in<br class="autobr"> /spip/ecrire/req/pg.php on line 146<small class="fine d-inline"> </small>»</p>
<p>Dans une autre fenêtre, j'ai par ailleurs un <br class="autobr"> «<small class="fine d-inline"> </small>Erreur SQL<br class="autobr"> SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'<br class="autobr"> 0<small class="fine d-inline"> </small>»</p>
<p>J'utilise "spip 2.0.7". Merci à toute bonne ame qui pourrait éclairer ma lanterne.</p>
<p>Edit : et ma version de posgresql est 7.4.23. Ce pourrait bien être ca le problème...</p>Mise à jour : Accés SPIP aux tables externes et jointures2009-04-12T08:02:56Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4153362009-04-12T08:02:56Z<p>J'ai complété l'article avec une note pour permettre la recherche dans des tables externes.</p>Accés SPIP aux tables externes et jointures2009-02-11T12:26:59Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4132852009-02-11T12:26:59Z<p>Problème résolu.</p>
<p>En effet, il fallait spécifier le nom de la table (amo_articles) avant la colonne (titre) :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>{par amo_articles.titre}</code></pre></div>
<p>Merci beaucoup.</p>Utiliser un nom de champ comme critère 2009-02-11T10:28:33Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4132792009-02-11T10:28:33Z<p>tu ne nous dis pas tout :<br class="autobr">
le message d'erreur dénonce « BOUCLE_articleasso » alors que tes boucles s'appellent « BOUCLE_...amo ».</p>
<p>sinon, essaye <code class="spip_code spip_code_inline" dir="ltr">{par amo_articles.titre}</code></p>Utiliser un nom de champ comme critère 2009-02-10T17:52:09Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4132532009-02-10T17:52:09Z<p>sisi ça ne marche pas.<br class="autobr">
le probleme vient peut-être d'ailleurs.</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code> * Erreur(s) dans le squelette o Erreur sur le site, {par titre inverse} BOUCLE_articleasso <BOUCLE_rubriqueamo(amo_rubriques) {id_rubrique=14} > <h2> #TITRE </h2> <br> #TEXTE <B_articleamo> <BOUCLE_articleamo(amo_articles) {id_rubrique} {statut='publie'} {par titre} {inverse} > #TITRE #TEXTE </BOUCLE_articleamo> </B_articleamo> </BOUCLE_rubriqueamo></code></pre></div>
<p>Notons que « par titre » et « inverse » se retrouve dans la même accolade de l'affichage du debug.</p>
<p>Quand je ne mets pas <br class="autobr">
<code class="spip_code spip_code_inline" dir="ltr"> {par titre} {inverse} </code> l'affichage des articles se fait par numéros.</p>Utiliser un nom de champ comme critère 2009-02-09T16:21:42Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4132102009-02-09T16:21:42Z<p>sisi ça marche.<br class="manualbr">le probleme doit venir d'ailleurs.</p>
<p>dans ton précédent message, il manque la parenthese fermante apres le nom de table.<br class="manualbr">essaye avec un squelette qui contient juste la boucle (entière) <br class="manualbr">et si jamais encore pb, indique nous cette boucle</p>Utiliser un nom de champ comme critère2009-02-09T15:53:05Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4132092009-02-09T15:53:05Z<p>Le problème continue avec la version SPIP 2.0.3 qui affiche « Erreur(s) dans le squelette ».</p>
<p>Quelqu'un a-t-il trouver une solution<small class="fine d-inline"> </small>?</p>Le traitement des images et les tables externes2008-12-27T18:02:18Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4115392008-12-27T18:02:18Z<p>Tu parles d'une utilisation de la balise #LOGO_ARTICLE qui référence un article issu d'une table externe<small class="fine d-inline"> </small>?</p>Accés SPIP aux tables externes et jointures2008-12-27T11:03:32Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4115302008-12-27T11:03:32Z<p>Une remarque : pour que la jointure se fasse, il est impératif d'utiliser dans la boucle des champs des <strong>2 tables</strong>. Si l'on ne procède pas ainsi, SPIP ne fera pas de jointure.</p>Le traitement des images et les tables externes2008-10-01T00:39:38Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4088622008-10-01T00:39:38Z<p>Je travaille avec 2 sites sous SPIP 1 beta2. Le deuxième site récupère les données du premier site grâce à la fonctionnalité des tables externes. Ça fonctionne super bien sauf pour les logo_article. J'ai essayé avec et sans filtre. Quelqu'un a une astuce pour contourner ce problème.</p>
<p>Merci de votre,</p>
<p>Pierre</p>Utiliser un nom de champ comme critère2008-06-27T16:13:47Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment4071522008-06-27T16:13:47Z<p>Pour prolonger votre contribution, comment peut-on faire en sorte qu'un des champ d'une table externe puisse être utilisé comme un critère dans une boucle genre :</p>
<p><code class="spip_code spip_code_inline" dir="ltr"><BOUCLE_naboucle(MATABLE {nom_dun_champ=valeur}></code></p>
<p>Pour l'instant, j'ai comme réponse : erreur critère inconnu. <br class="autobr">
Quelque chose à déclarer quelque part<small class="fine d-inline"> </small>? (SPIP 192)</p>Accés SPIP aux tables externes et jointures2007-10-14T17:47:27Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3991602007-10-14T17:47:27Z<p>Un élément de réponse se trouve dans la page <a href='https://contrib.spip.net/JonctionEntreTables' class="spip_url" rel='nofollow'>JonctionEntreTables</a></p>Accés SPIP aux tables externes et jointures2007-10-14T15:55:13Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3991522007-10-14T15:55:13Z<p>Bonjour à tous,<br class="autobr">
Quelle est la procédure de déclaration de la clé commune si elle ne porte pas le même nom dans les deux tables<small class="fine d-inline"> </small>?<br class="autobr">
Merci</p>Accés SPIP aux tables externes et jointures2007-10-12T19:33:32Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990932007-10-12T19:33:32Z<p>Pour un SPIP qui tourne déjà, il suffit de détruire son ficher de connexion : ça relance l'installation sans même avoir besoin de redéclarer le compte admin (puisque la base reste intacte), on tombe donc très rapidement (à la 4<sup class="typo_exposants">e</sup> page) sur le formulaire des bases supplémentaires. C'est un peu violent mais sans danger, et là la priorité c'est de terminer le portage en PostGres.</p>Accés SPIP aux tables externes et jointures2007-10-12T14:20:56Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990822007-10-12T14:20:56Z<p>1) j'ai documenté, ESJ a codé<small class="fine d-inline"> </small>!<br class="manualbr">2) le mieux c'est que ce n'est pas un plugin, c'est SPIP standard<small class="fine d-inline"> </small>!</p>Accés SPIP aux tables externes et jointures2007-10-12T14:19:50Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990812007-10-12T14:19:50Z<p>Oui Les apports de la 1.9.3 étendront encore les possibiltiés d'extensions « natives ». Il y aura aussi un mécanisme pour appeler cette page de déclaration sur un spip qui tourne déjà<small class="fine d-inline"> </small>? (pas seulement à l'installation)</p>
<p>PS : j'ai précisé qu'on pouvait se lier à un serveur externe (pas seulement une base) et mis un lien dans la note vers le commentaire trac...</p>Accés SPIP aux tables externes et jointures2007-10-12T13:27:25Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990802007-10-12T13:27:25Z<p>Quelques informations supplémentaire à cet article bienvenu.</p>
<p>Cette possibilité est déjà présente dans la 1.8, mais non documentée. Le problème était, et est toujours, de trouver un moyen complètement satisfaisant de déclarer les jointures. Il y aura sans doute un jour des changements sur ce point, mais on donnera des outils de migration si cela se produit.</p>
<p>L'accès à des tables externes ne se limite pas à la base utilisée par SPIP, ni même à son serveur SQL. Voir le message dans <a href="http://trac.rezo.net/trac/spip/changeset/10559" class="spip_out" rel='nofollow external'>SVN10559</a> et remonter les liens.</p>Accés SPIP aux tables externes et jointures2007-10-12T11:30:12Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990772007-10-12T11:30:12Z<p>En 1 : Merci Jean-Luc.<br class="manualbr">En 2 : Dite moi que c'est vrai, ce plugin ouvre des perspectives considérable, plus besoin de toucher d'ancienne BD non spip, on applique directe SPIP.<br class="manualbr">C'est tout simplement du pure bonheur.<br class="autobr">
Merci Jean-Luc</p>Accés SPIP aux tables externes et jointures2007-10-12T10:14:58Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990722007-10-12T10:14:58Z<p>OK , merci de ta réponse Jean-Luc.</p>
<p> j m'y colle ce WE. et si ça marche, je poste l'exemple.</p>Accés SPIP aux tables externes et jointures2007-10-12T10:04:18Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990702007-10-12T10:04:18Z<p>Exactement. D'ailleurs ça ferait un bon exemple.</p>Accés SPIP aux tables externes et jointures2007-10-12T09:33:50Zhttps://contrib.spip.net/Acces-SPIP-aux-tables-non-SPIP-et-jointures#comment3990682007-10-12T09:33:50Z<p>Si j ai bien compris...<br class="autobr">
ça veut donc dire par exemple que je pourrai afficher les derniers messages d'un forum phpbb<small class="fine d-inline"> </small>???</p>