单个表

时间:2015-04-29 11:22:22

标签: php mysql sql multiple-columns

我有独特的要求。我不知道它是我的表格结构问题还是其他一些问题,但我需要一个解决方案,我的输出结构更改或查询更改。

我有一个表,其中包含单个用户的两个字段的动态值。单个用户可以拥有该类型的多个记录。

下面的示例表

表名:tbl_parameters

parameter_id         parameter_name
1                    Current Location
2                    Booked Location
3                    Room Type

表名:tbl_paramter_data

id(auto_increment)    user_id   parameter_id       parameter_value 
1                        10     1                  Hyderabad
2                        10     2                  Delhi
3                        10     3                  Deluxe Room
4                        11     1                  Hyderabad
5                        11     2                  Bombay
6                        11     3                  A/C Room
7                        12     1                  Delhi
8                        12     2                  Bombay
9                        12     3                  Deluxe Room
10                       13     1                  Hyderabad
11                       13     2                  Delhi
12                       13     3                  Single Room

以上是我的两张桌子。这是一个酒店预订表。用户可以在印度任何地方预订酒店房间。所以,我存储在2个不同的表中。第一个表将包含我需要使用parameter_id存储的参数类型。第二个表包含每个用户的参数值。从他们预订的位置,他们预订的房间和剩余数据。还有一些其他参数。 **参数No是动态的。没有固定的参数,这就是我将单独的表维护为tbl_parameters的原因。

我的问题是如何获取

的数据
  1. 谁是用户预订海德拉巴"海德拉巴"在"孟买"酒店?
  2. 谁是用户预订了#34;豪华客房"来自"德里"在"孟买"酒店?
  3. 如何编写查询以从现有表(tbl_parameter_data)获取上述数据?

    或者我需要更改表格结构或存储方式吗?

1 个答案:

答案 0 :(得分:0)

我认为这样做会有所帮助。 (尚未测试)但是所有都取决于您的查询将获得多大的复杂性(每个参数需要新的连接)

SELECT user_id
from tbl_parameter_data p1 JOIN 
     tbl_parameters pa1 ON p1.parameter_id = pa1.parameter_id
JOIN (tbl_parameter_data p2 JOIN 
     tbl_parameters pa2 ON p2.parameter_id = pa2.parameter_id) 
ON p1.user_id=p2.user_id
WHERE pa1.parameter_name = "Current Location" 
  AND p1.parameter_value = "Hydrabad" 
  AND pa2.parameter_name = "Booked Location" 
  AND p2.parameter_value = "Bombay"

旧版本:

SELECT user_id
from tbl_parameter_data p1 JOIN 
JOIN tbl_parameter_data p2 ON p1.user_id=p2.user_id
WHERE p1.parameter_id = 1 
   AND p1.parameter_value = "Hydrabad" 
   AND p2.parameter_id = 2 
   AND p2.parameter_value = "Bombay"