2017-03-10 20 views
0

我想查詢MySQL數據庫中的表。在MySQL中使用AND並不返回任何結果

所以基本上,我需要基於表中列的值進行查詢。所以:

如果列A =值AND thisID是在值

OR A列<值與thisID是在值

但該查詢返回null的陣列,但數據的數組在數據庫中。

編輯:桌上的小背景和我想要做的。

來自界面的用戶將選擇一個業務區域。該業務區域可能有許多子區域(部門等),並且在這些區域內可能有許多用戶分配給每個部門。所以我將這個查詢傳遞給一個用戶和區域的數組。

如果分配類型爲3,則該條目被分配給用戶,所以想要然後檢查用戶(ID)是陣列所以在:r.assigned_type = 3 AND r.assigned_id IN(26102,26132,26133,26134,44749)

如果分配類型是1或2,所以不到3,該條目被分配到一個區域(網站/部門)。所以我想檢查區域(ID)是否在陣列中,因此:r.assigned_type < 3 AND r.assigned_id IN(10901,10937,10938,10939,10940,10941)

有可能有用戶和部門都有條目,這就是爲什麼我需要使用OR來檢查是否已分配用戶和區域

我使用正確的語法嗎?我沒有收到任何語法錯誤?

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name` 
FROM `risk_assessments` `r` 
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id` 
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id` 
WHERE `r`.`org_id` = 78 
AND `r`.`risk_type_id` = 10 
AND `r`.`assigned` = '1' 
AND `u`.`privilege_level` <= 7 
AND ((`r`.`assigned_type` = '3' AND `r`.`assigned_id` IN(26102,26132,26133,26134,44749)) 
OR (`r`.`assigned_type` < '3' AND `r`.`assigned_id` IN(10901,10937,10938,10939,10940,10941))) 
+0

你描述的不符合是什麼在查詢中,這反過來可能不是你打算做什麼達成一致的邏輯。儘管你應該清楚地告訴我們你的邏輯,以便有人能夠幫助你,但我可能會有一個括號問題。 –

+1

您不能在代碼中使用IF和ELSE條件來檢查'assigned_type'並在具有不同JOINS的條件下編寫兩個不同的查詢嗎? –

+0

怎麼樣CASE,我可以在查詢中使用大小寫,具體取決於列的值 – frobak

回答

0

只需在您的查詢中進行簡單的條件更改即可根據給出的示例獲取結果。

這裏是更新查詢:

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name` 
FROM `risk_assessments` `r` 
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id` 
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id` 
WHERE `r`.`org_id` = 78 
AND `r`.`risk_type_id` = 10 
AND `r`.`assigned` = '1' 
AND `u`.`privilege_level` <= 7 
AND `r`.`assigned_type` <= '3' 
AND `r`.`assigned_id` IN(10901,10937,10938,10939,10940,10941,26102,26132,26133,26134,44749) 
+0

好的,但是如果有用戶標識和區域標識相同的場合,那爲什麼我需要獨立檢查呢?我知道這可能不會發生,但我需要考慮這個 – frobak

+0

在這種情況下,我相信這個查詢將正常工作。 –

1

請檢查您的JOIN條件:

LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id` 
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id` 

這是因爲這兩個表相同r加入似乎是錯誤的。 assigned_id外鍵。

它應該是這樣的:

LEFT JOIN `users` `u` ON `u`.`id` = `r`.`user_id` (foreign key for users table) 
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`area_id` (foreign key for areas table) 
+0

assigned_id是列。是否是用戶ID或區域ID由分配的類型列決定 – frobak