8791 sujets

Développement web côté serveur, CMS

Hello, j'ai une DB qui contient des posts français et des traductions anglaises de ces posts.
Il y a une table POST2LANG

|  post_id |  language_id  |  translation_group|
       1               1                         0
       2               1                         21
       3               2                         21
       4               1                         0
       5               1                         22
       6               2                         22
Où sont répertoriés toutes les liaisons si un article est traduit : ici, le post post_id#3 est la traduction anglaise (language_id#2) du post_id#2 français (language_id#1) et le post_id#6 de post_id#5. 
Le post_id#1 n'a pas de traduction (translation_group=0)

A un post FRANCAIS (pas pour les autres), je peux lier une série d'articles.
Je récupère les IDs de ces articles liés dans un array.


Il y a une table POSTMETA

|  post_id  |  meta_key  | meta_value  |
|       2     | assoc_post |        4        |
|       2     | assoc_post |        5        |


Pour le post_id 2; j'ai donc $assoc_posts=array(4,5).

C'est pour les traductions que ça se complique :
-j'ai besoin de récupérer les articles liés à sa traduction française (j'ai donc le même $assoc_posts=array(4,5), jusque là pas de problèmes);
-une fois cet array récupéré, je voudrais
-->vérifier si les posts 4 et 5 ont une traduction anglaise.
-->si oui, remplacer les IDs de l'array par les IDs traduits
-->si non, garder les IDs français.

Pour le post id#3 (traduction du #2), je devrais donc recevoir
array(4,6) :
4 n'a pas de traduction anglaise
6 est la traduction de #5.

Comment puis-je faire cela ?

Merci bcp !
Modifié par gordie (06 Dec 2007 - 12:26)
wp_post2lang
post_id 	language_id 	translation_group
238                1            	26  	
239                3            	26
441  	           1             	45
518  	           3             	45


wp_postmeta

post_id 	meta_key 	meta_value
238             assoc_seance   	441  	


SELECT COALESCE( p4.post_id, m.meta_value )
FROM wp_post2lang AS p1
JOIN wp_post2lang AS p2 ON p1.translation_group = p2.translation_group
AND p2.language_id =1
JOIN wp_postmeta AS m ON p2.post_id = m.post_id
AND m.meta_key = 'assoc_seance'
JOIN wp_post2lang AS p3 ON p3.post_id = m.meta_value
LEFT JOIN wp_post2lang AS p4 ON p4.translation_group = p3.translation_group
AND p4.language_id = p1.language_id
AND p4.translation_group <>0
WHERE p1.post_id =238


retourne bien 518 ! (et 441 si le post_id#518 n'avait pas le language_iud#3)

-->
Modifié par gordie (07 Dec 2007 - 00:28)