2011-10-13 67 views
0
返回的記錄

考慮下面的表結構(不是我設計的,unchangable):搜索在MySQL

+---------------+-----------------------------+---------------------------+ 
| the_id  |   field_name   |  field_value  | 
+---------------+-----------------------------+---------------------------+ 
|  1  |   county   |  lincolnshire  | 
|  1  |   type    |   hotel   | 
|  2  |   county   |  lincolnshire  | 
|  2  |   type    |   castle   | 
+---------------+-----------------------------+---------------------------+ 

基本上,我想執行這一數據的搜索,返回的任何的參數相匹配the_id我指定。因此,例如,我想搜索所有the_id字段,其​​中(field_name =縣和field_value =林肯郡)AND(field_value = type AND field_value = castle)。因此,只有1個會被返回。

本質上,我想知道是否有可能對返回的結果執行搜索。由於字段是完全the_id協作的獨立實體,這裏就是我想在僞代碼:

  • 在結果
  • 返回子集查找county
  • 搜索the_idtype

問題是,我不是100%確定這是如何在MySQL中實現的。任何反饋肯定會受到感謝!

回答

3

啊,使用SQL數據庫作爲鍵值存儲,因爲它使DB架構,以便更簡單...第一關的樂趣,藉此系統的原始設計者了回來,並毆打了他們,一條腐爛的溼魚,最好是鯨魚大小,從高處落下。

然後...

SELECT the_id, type, county 
FROM (
    SELECT type_name.the_id AS the_id, type.field_value AS type, county.field_value AS county 
    FROM yourtable AS type 
    LEFT JOIN yourtable AS county ON county.the_id = type.the_id AND county.field_name='county' 
    WHERE type.field_type = 'type' 
) AS child 
WHERE county='lincolnshire' 
+0

+1爲魚襲擊 - 雖然嵌套選擇不會工作,如果你也詛咒一個真正的舊版本的MySQL(<5 IIRC)。 – CD001

3
SELECT t1.the_id 
    FROM YourTable t1 
     INNER JOIN YourTable t2 
      ON t1.the_id = t2.the_id 
    WHERE t1.field_name = 'county' 
     AND t1.field_value = 'lincolnshire' 
     AND t2.field_name = 'type' 
     AND t2.field_value = 'castle' 
+0

+1,因爲這應該是向後兼容的(MySQL 4)。 – CD001