2010-07-28 4 views
1

Quelle serait la meilleure façon de gérer cette situation?mysql rbar situation

Je travaille sur un logiciel standard, et il stocke les noms de champs définis par l'utilisateur dans la base de données comme une ligne au lieu d'ajouter une nouvelle colonne à la table. Il ressemble à ceci:

ID fieldName fieldValue propertyId 
    1 latitude 23.192  id_property1 
    2 longitude -10.323  id_property1 
    3 latitude 23.192  id_property2 
    4 longitude -11.824  id_property2 
    5 latitude 25.254  id_property3 
    "         " 

J'ai besoin de filtrer ce tableau en fonction des commentaires des utilisateurs pour fieldName et fieldValue, donc si l'utilisateur entre fieldName = « latitude » ET fieldValue = « 23,192 » il retournerait id_property1 et id_property2. Mais si l'utilisateur entre fieldName = "latitude" ET fieldValue = "23.192" AND fieldName = "longitude" AND fieldValue = "- 10.323" il reviendrait juste id_property1.

J'ai fait une approche en utilisant des boucles for php, mais je crains que cela ne s'embourbe sous beaucoup d'enregistrements.

Merci!

Répondre

0

Utilisez un autojointure:

SELECT p0.propertyId 
FROM propsTable AS p0 
JOIN propsTable AS p1 ON p1.propertyId=p0.propertyId 
WHERE p0.fieldName='latitude' AND p0.fieldValue=23.192 
AND p1.fieldName='longitude' AND p1.fieldValue=-10.323 
+0

Ne serait-ce pas revenir records, car il n'y a pas d'enregistrement qui contient à la fois fieldName = 'de latitude' et '' de longitude = fieldName? –

+0

nm qui a fonctionné. Ai-je besoin d'ajouter une autre jointure pour chaque condition dont j'ai besoin? Disons que j'ai trois conditions. SELECT p0.propertyId FROM propsTable AS p0 JOIN propsTable AS p1 ON p1.propertyId = p0.propertyId. propsTable AS p2 ON p2.propertyId = p0.propertyId O WH p0.fieldName = 'latitude' ET p0.fieldValue = 23.192 ET p1.fieldName = 'longitude' ET p1.fieldValue = -10.323 ET p2.fieldName = ' sq_feet 'AND p2.fieldValue> 2000 –

+0

Oui, bien qu'il manque un mot clé 'JOIN' (juste avant' propsTable AS p2'). – bobince

Questions connexes