2011-10-13 71 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