8797 sujets

Développement web côté serveur, CMS

Bonjour !
Je cale un peu sur cette requête :
j'ai

$mesids = '1,3,5,9,24';
$lang='2';


j'ai une table posts2lang avec les champs

|  post_id  |  language_id  |  translation_group  |
|      1      |        1          |             0            |
|      2      |        2          |             0            |
|      3      |        1          |             1            |
|      4      |        2          |             1            |
|      5      |        3          |             2            |
|      6      |        2          |             2            |
|      7      |        2          |             3            |
|      8      |        1          |             0            |
|      9      |        1          |             3            |
|     10      |        3          |             4            |
|     11      |        3          |             4            |


Je voudrais récupérer, pour chaque ID de $mesids; le post_id si le language=$lang et que le translation_group est identique (et !=0).

Autrement dit, je devrais ici récupérer 4-6-7.

Comment puis-je faire ?

Je ne sais pas trop s'il faut une autre table pour comparer; mais j'ai une tables posts qui a un champs posts.ID = posts2lang.post_id.

Merci de votre aide !
Modifié par gordie (03 Dec 2007 - 17:23)
Administrateur
à première vue...

$result = mysql_query('SELECT post_id FROM posts2lang WHERE post_id IN ('.$mesids.') AND language_id=\''.$lang.'\' AND translation_group!=0');

mais à quoi correspond la clause "translation_group est identique" ? par rapport à quoi ? entre lui-même ? je ne vois pas par rapport à l'exemple et au résultat attendu 4-6-7.
C'est vrai que c'est pas limpide Smiley rolleyes !

Je suppose que les valeurs de $mesids correspondent à des post_id de messages... si ces messages ont une traduction dans une autre langue alors cette traduction aura le même translation_group et language_id correspond à la langue en question Smiley murf ?

Si c'est bien ça je ferais :
$sql = 'SELECT post_id from post2lang where translation_group in (select translation_group from post2lang where translation_group <> 0 and post_id in ('.$mesids.')) and language_id = '.$lang.'';

Modifié par Heyoan (03 Dec 2007 - 18:36)
Hello dew !
Et bien; la requête doit donc regarder la ligne qui contient l'un des ID donnés; prendre son translation_group s'il ne vaut pas zéro (par ex.2);
vérifier quel autre ligne a le même translation_group (notre 2); et renvoyer l'ID de cette ligne.
Oups... pas vu que tu avais posté... Tu peux essayer la requête du dessus.
Modifié par Heyoan (03 Dec 2007 - 18:38)
Salut, c'est tout à fait ce que je cherchais, merci beaucoup !

Encore un truc : je voudrais au sein de la même requête, vérifier si ce post_id a comme valeur 'publish' pour le champs 'online' de la table posts.
la colonne ID de posts et la colonne post_id de post2lang concordent...

Merci 1000x.
Modifié par gordie (03 Dec 2007 - 22:03)
Ben...
$sql = 'SELECT post_id from post2lang, posts where translation_group in (select translation_group from post2lang where translation_group <> 0 and post_id in ('.$mesids.')) and language_id = '.$lang.' and post_id = id and online=\'publish\'';
Smiley murf
Super ! ça m'aide beaucoup.
J'avais lu des trucs mais qui marchaient avec INNER JOIN, je sais pas ce que ça change.??
ça m'a l'air plus simple ici.

Merci !