2010-07-28 37 views
1

處理這種情況的最佳方法是什麼?mysql rbar情況

我正在使用現成的軟件,它將用戶定義的字段名稱作爲一行存儲在數據庫中,而不是將新列添加到表中。它看起來像這樣:

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 
    "         " 

我需要基於對字段名和fieldValue方法用戶輸入過濾此表,因此,如果用戶輸入字段名=「緯度」和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

使用自聯接:

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

這難道不返回任何記錄,因爲是同時包含字段名=「緯度」和字段名=「東經」沒有記錄? – 2010-07-28 14:52:47

+0

納米工作。我需要爲每個需要的條件添加另一個連接嗎?假設我有三個條件。 SELECT p0.propertyId FROM propsTable AS p0 JOIN propsTable AS p1 ON p1.propertyId = p0.propertyId。 propsTable爲P2 ON p2.propertyId = p0.propertyId WHERE p0.fieldName = '緯度' AND p0.fieldValue = 23.192 AND p1.fieldName = '經度' AND p1.fieldValue = -10.323 AND p2.fieldName =」 sq_feet'AND p2.fieldValue> 2000 – 2010-07-28 15:17:25

+0

是的,雖然在那裏有一個'JOIN'關鍵字(就在'propsTable AS p2'之前)。 – bobince 2010-07-28 16:29:29