[SPIP Zone] Tables non spip et jointures

Bonsoir, je me heurte à un problème sans trouver de solution. J’ai deux tables qui sont jointes, une table societes_salaries et une table societes. Dans la table societes_salaries, j’ai un champ id_societe qui fait la jointure avec la table societes, et, dans les deux tables, j’ai un champ ‹ nom ›. Bon, rien que de très banal. Mais, avec la boucle suivante :

<BOUCLE_salarie(SOCIETES_SALARIES SOCIETES){id_salarie}>
#PRENOM #NOM : #NOM

</BOUCLE_salarie>
Je voudrais, dans le premier #NOM, celui du salarié, ça ça marche, mais, dans le deuxième, celui de la société dont il dépend, et ça ne marche pas … Logique. Pourtant, si je mets #SECTEUR (c’est un autre champ dans la table societes), ça marche bien …

Comment faire pour que j’obtienne ce que je veux, sans imbriquer une autre boucle (puisque la jointure est bien reconnue par spip) ?


Marc

Marc Valleteau de Moulliac a écrit :

Comment faire pour que j'obtienne ce que je veux, sans imbriquer une autre boucle (puisque la jointure est bien reconnue par spip) ?

que donne &var_mode=debug ?

Eh bien justement, si je mets la balise #SECTEUR, la requête prend bien en compte ce champ, pas si je mets #NOM, comme ci-dessous :

1. avec #NOM
la boucle :
<B_salarie>
<ul>
<BOUCLE_salarie(SOCIETES_SALARIES SOCIETES){id_salarie=9}>
<li>#PRENOM #NOM : #NOM</li>
</BOUCLE_salarie>
</ul>
</B_salarie>
le requête
1 SELECT societes_salaries.prenom, societes_salaries.nom
2 FROM societes_salaries AS `societes_salaries`
3 WHERE (societes_salaries.id_salarie = '9'), qui donne 'Sandrine PETOSIRIS : PETOSIRIS' On voit bien que le nom est répété deux fois.

2. avec #SECTEUR
<B_salarie>
<ul>
<BOUCLE_salarie(SOCIETES_SALARIES SOCIETES){id_salarie=9}>
<li>#PRENOM #NOM : #SECTEUR</li>
</BOUCLE_salarie>
</ul>
</B_salarie>
Cette fois (j'y perds mon latin !!) il me dit Table SQL SOCIETES non reconnue, _salarie !!
Pourtant en mode debug, j'ai une requête sans la table en question, évidemment :
1 SELECT societes_salaries.nom
2 FROM societes_salaries AS `societes_salaries`
3 WHERE (societes_salaries.id_salarie = '9')

Alors que si je fais une boucle simple sur la table SOCIETES, il m'affiche bien le contenu !!

Je suis en 192e, y aurait-il une incompatibilité ? Je l'ai essayé sur une autre machine, avec la même version, et la table a bien été reconnue !!

Très perplexe, maintenant ...
----
Mar

Le 10 déc. 08 à 18:55, denisb a écrit :

Marc Valleteau de Moulliac a écrit :

Comment faire pour que j'obtienne ce que je veux, sans imbriquer une autre boucle (puisque la jointure est bien reconnue par spip) ?

que donne &var_mode=debug ?

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le 11 décembre 2008 02:01, Marc Valleteau de Moulliac a écrit :

Eh bien justement, si je mets la balise #SECTEUR, la requête prend bien en
compte ce champ, pas si je mets #NOM, comme ci-dessous :

1. avec #NOM
la boucle :
<B_salarie>
<ul>
<BOUCLE_salarie(SOCIETES_SALARIES SOCIETES){id_salarie=9}>
<li>#PRENOM #NOM : #NOM</li>
</BOUCLE_salarie>
</ul>
</B_salarie>

Spip ne doit pas savoir discriminer les champs #NOM. Il faudrait lui
donner une information supplémentaire. Es-tu obligé d'avoir un champ
nom dans chaque table ?

--
@plus

Hiện nay, Jacques ở Hà Nội

Pour les lyonnais++ spip-lyon@rezo.net http://spip-party.net/-Lyon-

Marc Valleteau de Moulliac a écrit :

Très perplexe, maintenant ...

ce serait peut-être :
   <BOUCLE_salarie(SOCIETES_SALARIES spip_societes) {id_salarie=9}>

mais de toute façon, avec l'ambigüité sur #NOM...

le plus simple (à mon sens) :
   <BOUCLE_salarie(SOCIETES_SALARIES) {id_salarie=9}>
     <BOUCLE_societe(SOCIETES) {id_societe}>
       <li>#_salarie:PRENOM #_salarie:NOM : #NOM</li>
     </BOUCLE_societe>
   </BOUCLE_salarie>

Le 11 déc. 08 à 01:19, denisb a écrit :

Marc Valleteau de Moulliac a écrit :

Très perplexe, maintenant ...

ce serait peut-être :
<BOUCLE_salarie(SOCIETES_SALARIES spip_societes) {id_salarie=9}>

Oups ! Merci pour le rappel, effectivement, en écrivant le nom de la deuxième table en minuscules, ça passe beaucoup mieux !!

mais de toute façon, avec l'ambigüité sur #NOM...

Eh bien, c'est là que le bât blesse, effectivement : si je mets un autre champ, (par exemple #SECTEUR) de la table societes, ça va bien, et la requête sql est bonne :
1 SELECT societes_salaries.nom, J0.secteur
2 FROM societes AS `J0`, societes_salaries AS `societes_salaries`
3 WHERE (societes_salaries.id_salarie = '9')
4 AND (societes_salaries.id_societe = J0.id_societe)

alors que spip ne sait plus quoi faire (et c'est normal) quand j'ai deux fois #NOM.

Bon, mais, quand on travaille 'normalement' sur une bdd, il est recommandé de mettre des noms faciles à reconnaître pour les champs des tables, et le même nom ne gêne pas, puisque, dans une requête "manuelle" on va les distinguer grâce à societes_salaries.nom et societes.nom ...

Il faudrait que l'on puisse 'aider' spip à reconnaître ça dans ce type de boucle de jointure, en passant un filtre, peut-être, du genre [(#NOM|societe)] ce qui serait pratique. Le problème est que je ne suis pas sûr de savoir moi-même modifier cela ...

le plus simple (à mon sens) :
<BOUCLE_salarie(SOCIETES_SALARIES) {id_salarie=9}>
   <BOUCLE_societe(SOCIETES) {id_societe}>
     <li>#_salarie:PRENOM #_salarie:NOM : #NOM</li>
   </BOUCLE_societe>
</BOUCLE_salarie>

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone