2012-07-04 80 views
0

選擇,我想一些幫助,下面:下面:)Mysql的使用條件邏輯


(我的描述可能會顯得怪異,例如圖片,以便生成圖形,我想選擇「天」基於由 表單生成的查詢(在此階段查詢將僅包含'from'和'to'國家)。

我的問題是,我不知道如何使選擇使用條件邏輯,所以它從每個'item_id'具有匹配'從'和'到'選擇'天'。

(以及其他的問題是,我不知道有什麼好的關鍵字或實際上這是怎麼叫的,所以請原諒我,我只是做了一些盲目的谷歌搜索,並試圖發現這裏類似的問題)

example

+0

你能舉一個你的輸入(從)的例子和你期待的結果嗎? (我真的不明白你的問題) – mb14

+1

你爲什麼要像這樣構建表格?看起來更像是將數據庫用作鍵值存儲來將自己的元數據庫強加於其上,這首先抵消了關係數據庫的目的。 –

+1

這不是一個適當的關係。列'meta_value'混合不同類型的值。你的表需要列'id','origin','destination','date','days','userid'或類似的來表示你的信息。 –

回答

2
SELECT days.meta_value 
FROM tableName AS from_country, 
    tableName AS to_country, 
    tableName AS days 
WHERE from_country.item_id = to_country.item_id 
    AND from_country.item_id = days.item_id 
    AND from_country.field_id = 90 
    AND to_country.field_id = 93 
    AND days.field_id = 251 

如果您想要過濾from_country.meta_value或類似條件,您可以添加更多限制。並且您應該將tableName替換爲表格的實際名稱。

from_country,to_countrydays視爲表中行的三個不同指針,或者從您的關係中取值的不同變量。你希望他們三個都能描述同一個項目,而且你也希望他們每個人都能夠引用與其名字相關的字段。這導致上述條件。

你甚至可以創建一個視圖,才能訪問這樣的設計不好的表格設計合理的一個:

CREATE VIEW viewName AS 
SELECT item.item_id AS item_id, 
     from_country.meta_value AS from_country, 
     to_country.meta_value AS to_country, 
     days.meta_value AS days 
FROM (SELECT DISTINCT item_id FROM tableName) AS item 
    LEFT JOIN tableName AS from_country 
      ON (from_country.item_id = item.item_id AND 
       from_country.field_id = 90) 
    LEFT JOIN tableName AS to_country 
      ON (to_country.item_id = item.item_id AND 
       to_country.field_id = 93) 
    LEFT JOIN tableName AS days 
      ON (days.item_id = item.item_id AND 
       days.field_id = 251) 

這將創建一個有四列,從中你可以簡單地選擇一個視圖:

SELECT days FROM viewName WHERE from_country LIKE 'A%' 

或任何你想選擇。請注意,由於左連接,某些項目的缺失值將導致NULL值。這與上面的查詢不同,它將省略沒有指定全部三個值的任何項目。在你的情況下使用更合適的方法。

+0

看起來你的查詢比我的簡單得多。大拇指! – invisal