requête sql avec de multiples lorsque les déclarations

Je suis d'avoir un, plutôt, pour moi, compliqué de requête mysql sur laquelle je suis totalement coincé et ne peut pas trouver la réponse en ligne.

Voici ma requête:

SELECT
items.*
FROM
items
INNER JOIN
items_meta_data
WHERE
(
        (meta_key = 'lat' AND meta_value >= '55')
    OR
        (meta_key = 'lat' AND meta_value <= '65')
)
AND
(
        (meta_key = 'long' AND meta_value >= '20')
    OR
        (meta_key = 'long' AND meta_value <= '30')
)
GROUP BY
item_id

Bien sûr, j'ai testé la requête avec seulement 1 déclaration et qui fonctionne très bien. Donc, si je ne passe le long ou lat partie puis-je obtenir des résultats. Seulement quand j'essaie de les coudre ensemble, j'obtiens des résultats différents.

Merci pour l'aide à l'avance!

La structure de la table est comme suit:

Les éléments de tableau:
ID
item_name
item_description

Table meta:
meta_id
item_id
meta_key
meta_value

Solution

À quiconque est intéressé, j'ai enfin réussi à résoudre ce problème. Merci à vous tous pour votre aide et votre intérieur.

SELECT
SQL_CALC_FOUND_ROWS items.* 
FROM
items
INNER JOIN
items_meta ON (items.ID = items_meta.post_id)
INNER JOIN
items_meta AS m1 ON (items.ID = m1.post_id)
WHERE
1=1
AND
items.post_type = 'post'
AND
(items.post_status = 'publish')
AND
( (items_meta.meta_key = 'lat' AND CAST(items_meta.meta_value AS SIGNED) BETWEEN '55'   AND '65')
AND
(m1.meta_key = 'long' AND CAST(m1.meta_value AS SIGNED) BETWEEN '20' AND '30') )
GROUP BY
items.ID
ORDER BY
items.date
DESC
  • Peux-tu expliquer plus précisément ce qui se passe quand vous "coudre ensemble"? Ce que les données vous interrogez ressembler et quels résultats obtenez-vous?
  • Nous pouvons supposer que ce n'est pas un bug de mysql, vous devez donc vous dire ce qui vous attend, et ce que vous au contraire observé. Quelles sont les données que vous utilisez par le biais de la requête?
  • Vous êtes à la recherche d'une base de données en ligne où meta_key est à la fois 'lat' et 'long'. Je ne suis pas sûr que ce soit possible...
  • Il ne se passe rien, les résultats sont vides. Aucune requête d'erreur ou rien d'autre. Aussi pas de résultats tu que je sais pour sûr qu'il existe une entrée avec les valeurs exactes comme indiqué ci-dessus... donc, il devrait au moins retourner qu'une seule ligne.
  • -1 pour polémiquer sur impossible OÙ l'une des clauses
  • rien n'est impossible! Je suis juste de faire une erreur que j'essaie de comprendre en demandant de l'aide.
  • Veuillez fournir des précisions sur ce que vous voulez atteindre avec votre requête!
  • vous avez été dit que votre OÙ se réduit à WHERE 0=1 efficacement qui est toujours faux. C'est ce que je veux dire par impossible. Ce n'est pas un problème SQL: c'est un problème de logique...
  • Je n'ai encore aucune idée de pourquoi vous donner un -1 pour quelque chose comme ça... de toute façon le problème est résolu. J'ai posté la solution dans mon post original. Merci aussi pour votre aide

InformationsquelleAutor user1117774 | 2011-12-27