Accueil > Tickets > préciser la documentation sur la déclaration de jointures

Ticket #272 - préciser la documentation sur la déclaration de jointures

Créé le mardi 8 novembre 2011 par Pierre-Aurelien

Assigné à :
Le ticket n’a été assigné à personne.

Les jointures, au sens SQL du terme, ou ’liaisons possible entre deux tables", comme vous dites dans la doc, ne sont pas symetriques : lorsqu’on a un lien de type 1 vers N, par exemple. (une rubrique peut etre associée à plusieurs articles. En revanche, un article est forcément associé à une et une seule rubrique).

Dès lors que ce n’est pas symétrique, il faudrait préciser explicitement dans la documentation dans quel sens ca fonctionne !

je veux dire par là que je ne sais pas s’il faut écrire :

$interface[’tables_jointures’][’spip_rubriques’][] = ’articles’

ou bien :

$interface[’tables_jointures’][’spip_articles’][] = ’rubriques’

 ???

(Si jamais quelqu’un me répond "y’a pas de différence, c’est la meme chose ! Je ferai alors intervenir le parametre facultatif qui permet de préciser "le champs de la liaison", et là, vous ne pouvez plus me dire que c’est la meme chose !)

bon, allez, je vais tricher : je vais regarder dans le code source de SPIP, dans le fichier ecrire/public/interfaces.php ... et là, que vois-je :

c’est ni l’un ni l’autre !!! La jointure entre la table spip_rubriques et la table spip_articles n’est pas définie dans ce fichier ! mince alors ! Pourquoi ??? C’est pourtant bien une jointure au sens SQL classique du terme ! Si je veux avoir le titre de la rubrique dans laquelle se trouve mon article XXX, je suis bien obligé de faire une requete SQL qui contient une jointure, non ??? alors pourquoi certaines jointures doivent etre renseignées par le biais de ce mécanisme $interface[’tables_jointures’] et d’autres non ?

Tout cela mérite d’être éclairci quelque peu !

2 commentaires

  • bon, alors, je me réponds à moi-même, sur la base de ce que j’ai pu constaté dans le code source de SPIP (fichier ecrire/public/interfaces.php) :

    si on a un lien de type 1 vers N (ex : 1 rubrique contient N articles ou encore : 1 article est associé à 3 signatures), la syntaxe qu’il convient d’utiliser est visiblement la suivante :

    $interface[’tables_jointures’][’spip_rubriques’][] = ’articles’ ;
    $interface[’tables_jointures’][’spip_articles’][] = ’signatures’ ;

    (par contre, ne me demandez pas pourquoi la premiere ligne concernant rubriques-articles n’est pas présente dans ce fichier alors que la deuxieme ligne concernant articles-signatures y est bien... J’en sais rien !)

    Maintenant, en ce qui concerne l’utilisation du parametre facultatif qui permet de préciser "le champs de la liaison" :

    $interface[’tables_jointures’][’spip_articles’][’id_auteur’] = ’auteurs_articles’ ;

    Il s’agit du nom du champ de la DEUXIEME table (celle qui se trouve après le "="). C’est le champ qui sert de liaison entre cette deuxieme table et la premiere.

    C’est pas tres logique d’avoir le nom du champ de la DEUXIEME table collé au nom de la premiere table... C’est un peu source d’erreurs et de confusions, mais c’est comme ca !

  • Les déclarations des jointures des objets du core, comme les rubriques et les articles, sont rassemblées. Et les déclarations des jointures des objets déclarés dans un plugin (ou un plugin-dist)... sont déclarées dans ce plugin.

Seules les personnes identifiées peuvent écrire des tickets ou commentaires.

Identifiez vous.