Question

J'ai une table qui ressemble à ceci:

meta_id post_id     meta_key    meta_value
271     4   _aciudad             New york
270     4   _apais               USA
267     10  _aservicio           Alojamiento

...
261     43  _apais               USA
238     43  _aciudad             Chicago
262     43  _aservicio           Alojamiento
...
261     43  _apais               USA
238     43  _aciudad             Miami
262     43  _aservicio           Alojamiento

Ce que je dois faire, c'est afficher tous les registres qui correspondent à la ville> la ville.Ou commander tous les registres _aciudad par pays, quelque chose comme:

meta_id post_id  meta_key   meta_value       meta_key    meta_value 
235      42      _aciudad        New York     _apais       USA
236      56      _aciudad        Chicago      _apais       USA
237      57      _aciudad        Miami        _apais       USA
238      58      _aciudad        Sidney       _apais      Australia
238      59      _aciudad        Melbourne    _apais      Australia

Je ne sais pas comment faire cela, je suppose avec une jointure intérieure?une double sélection?S'il vous plaît aidez-moi !!

Était-ce utile?

La solution

   SELECT t1.meta_id, 
           t1.post_id, 
           t1.meta_key, 
           t1.meta_value, 
           t2.meta_key, 
           t2.meta_value 
    FROM table t1, table t2  
    WHERE t1.post_id = t2.post_id 
    AND t1.meta_key = '_apais'
    AND t2.meta_key = '_aciudad'
    ORDER BY t1.meta_key

Autres conseils

Je ne sais pas si c'est ce que vous recherchez ou si la jointure sur le terrain est correcte, car il n'est pas très clair dans votre question, mais qu'en est-il de cette requête?

SELECT City.meta_id
     , City.post_id
     , City.meta_key
     , City.meta_value
     , Country.meta_key
     , Country.meta_value
  FROM yourTable City
INNER JOIN yourTable Country ON City.post_id = Country.post_id
WHERE City.meta_key = '_aciudad' AND Country.meta_key = '_apais'
ORDER BY Country.meta_value, City.meta_value

SELECT  mc.*, mp.meta_key, mp.meta_value
FROM    meta mc
JOIN    meta mp
ON      mp.post_id = mc.post_id
        AND mp.meta_key = '_apais'
WHERE   mc.meta_key = '_aciudad'
ORDER BY
        mp.meta_value, mc.meta_value

Essayez un auto-rejoindre.Pour le faire fonctionner, vous devez utiliser des alias pour la table, vous pouvez donc vous y référer deux fois.

quelque chose comme ceci:

select

  t1.meta_id, t1.post_id,
  t1.meta_key, t1.meta_value, 
  t2.meta_key, t2.meta_value

from TableName t1
  inner join TableName t2
  on t1.meta_id = t2.meta_id and t1.post_id = t2.post_id
    and t1.meta_key = "_aciuidad" and t2.meta_key = "_apais"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top