处理这种情况的最佳方法是什么?
我正在开发现成的软件,它将用户定义的字段名称作为一行存储在数据库中,而不是向表中添加新列。它看起来像这样:
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
" "
我需要根据fieldName和fieldValue的用户输入过滤此表,因此如果用户输入fieldName =“latitude”AND fieldValue =“23.192”,它将返回id_property1和id_property2。但是如果用户输入fieldName =“latitude”AND fieldValue =“23.192”AND fieldName =“longitude”AND fieldValue =“ - 10.323”,它将返回id_property1。
我在php中使用for循环做了一个方法,但是我担心它会在很多记录下陷入困境。
谢谢!
答案 0 :(得分:0)
使用自我加入:
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