8722 sujets

Développement web côté serveur, CMS

Bonjour,

D'abord, merci pour l'intérêt que vous portez à mon post.
Alors, j'ai cette requête :


SELECT p.ID, p.post_type, p.name, p.content, p.date, p.parent, p.state, p.o,
	   mv.post_ID, mv.meta_key, mv.meta_value 
FROM post p
LEFT JOIN post_meta_value mv ON  mv.post_ID = p.ID 


Le problème c'est que un "post" peut avoir plusieurs "meta_value", et actuellement je ne récupère qu'une entrée de la table post_meta_value par "post", ex :


Array
(
    [ID] => 33
    [post_type] => 3
    [name] => ai03
    [content] => 
    [date] => 0000-00-00 00:00:00
    [parent] => 1
    [state] => 0
    [o] => 0
    [post_ID] => 33
    [B][meta_key] => article_images
    [meta_value] => [{"ID":"34"}][/B]
)


Je cherche donc un moyen en SQL de récupérer plusieurs meta_key / meta_value par entrée dans la table post.

C'est possible ? Je deviens dingue Smiley smile

Merci d'avance
Hello!

Et en prenant le problème dans l'autre sens ?


SELECT p.ID, p.post_type, p.name, p.content, p.date, p.parent, p.state, p.o,
	   mv.post_ID, mv.meta_key, mv.meta_value 
FROM post_meta_value mv
INNER JOIN post p ON  mv.post_ID = p.ID 


Comme ça, tu récupères une ligne pour chaque enregistrement dans ta table metas, avec a chaque fois, le post qui correspond à ta meta Smiley cligne

PS: Le LEFT JOIN saute du coup, puisque normalement, tu ne peux pas avoir de métas qui ne soient pas rattachés à un article. Dans le cas contraire, il faut mettre un .... RIGHT JOIN Smiley smile
Merci beaucoup !
Du coup je fais cette requête :

SELECT mv.post_ID, mv.meta_key, mv.meta_value, p.ID, p.post_type, p.name, p.content, p.date, p.parent, p.state, p.o  FROM post_meta_value mv JOIN post p ON  mv.post_ID = p.ID


Mais du coup, dans mon tableau de sortie, pour chaque "post", je récupère autant d'éléments qu'il a de "meta_value" ex :


Array (
...
)

Array
(
    post_ID => 31
    meta_key => description
    meta_value => az
    ID => 31
    post_type => 3
    name => ai02
    content => 
    date => 0000-00-00 00:00:00
    paren] => 1
    state => 0
    o => 128
)

Array
(
    post_ID => 31
    meta_key => article_images
    meta_value => []
    ID => 31
    post_type => 3
    name => ai02
    content => 
    date => 0000-00-00 00:00:00
    parent => 1
    state => 0
    o => 128
)

Array (
...
)


Ce que je veux en sortie, c'est une seule entrée par "post" sous cette forme :

Array (
...
)

Array
(
    post_ID => 31
[b]article_images => []
    description => az[/b]
    ID => 31
    post_type => 3
    name => ai02
    content => 
    date => 0000-00-00 00:00:00
    parent => 1
    state => 0
    o => 128
)

Array (
...
)


Du coup, je fais ça actuellement :


while ($element = $reponse->fetch(PDO::FETCH_ASSOC))
{
     $test_tab[$element['ID']][$element['meta_key']] = $element['meta_value'];
     unset($element['meta_key']);
     unset($element['meta_value']);
     $this->list[$element['ID']] = $element;
}

foreach ($this->list as $key => $value) {
     foreach ($test_tab[$key] as $k => $v) {
          $this->list[$key][$k] = $v;
     }
}


Et ça fonctionne. Pensez-vous que c'est la "bonne" méthode ?

Merci encore !
Modifié par Gigipop- (15 Jul 2014 - 12:59)