2015-04-29 63 views
0

我有獨特的要求。我不知道這是我的表結構問題還是其他一些問題,但是我需要爲輸出結構更改或查詢更改提供解決方案。mysql多行值在哪裏條件在一個表上

我有一個表包含一個用戶的兩個字段的動態值。一個用戶可以擁有多種類型的記錄。

實施例下面的表

表名: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存儲的參數類型。第二個表格包含每個用戶的參數值從他們預訂的位置,預訂的房間和剩餘數據。還有一些其他參數。 **參數的數量是動態的。沒有固定的參數號,這就是我作爲tbl_parameters維護一個單獨的表的原因。

我的問題是如何得到

  1. 誰是用戶預訂了從「海得拉巴」,在「孟買」酒店的客房中的數據?
  2. 誰是用戶在「孟買」酒店預訂了「德里」的「豪華客房」?

如何編寫查詢以從現有表(tbl_parameter_data)中獲取上述數據?

或者是否需要更改表格結構或我們存儲的方式?

+0

做過什麼,有一個叫'EAV' - 它代表爲實體屬性值。這也是*關係*數據的反模式,因爲很難查詢*關係*。另一方面,很容易存儲任意數量的屬性而不改變表格。在「適當的」表中顯示基於EAV的數據稱爲pivoting。但是,隨着數據的增長,性能將會下降 - 您必須首先進行調整,然後進行查詢。您的問題的解決方案是混合方法,並使用多個查詢而不是一個。您需要動態數據,您還需要查詢它。 –

+0

這是一個非常常見的表格結構,它幾乎不是一個「獨特的要求」。 – Barmar

+0

除非您提供代碼,您迄今嘗試使用的腳本,否則我們無法幫助您。 –

回答

0

我認爲這會做到這一點。 (尚未測試),但一切都取決於你的查詢會變得多麼複雜(每個paramater需要新的連接)

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

您應該加入'tbl_parameters'而不是硬編碼參數ID。 – Barmar

+0

所有取決於背後的邏輯,如果在例如selectboxes的網站上,我寧願返回id並在查詢中使用它們。但是加入也應該是可能的 – Ramon

+0

他說在問題中沒有固定數量的參數,這就是我將單獨的表格保存爲tbl_parameters_的原因。 – Barmar