2016-07-27 30 views
-1

我想得到如果'產品'是電視和標誌是好的,那麼我想要的顏色是紅色的。但是,我也希望獲得電視標記的每一行都不是'好',而不考慮顏色。所以我使用NOT EXISTS()來檢查電視行'mark'是否沒有'good',但是它失敗了。我是否使用NOT EXISTS()錯誤或其他方式?預期的輸出是獲得與標記好的紅色所有產品的電視,但也可以是任何產品的電視標記不是「好」 regardles試圖使用不存在檢查行存在,但失敗

<?php 
 
$sql = $wpdb->get_var($wpdb->prepare(" 
 
SELECT product FROM table WHERE product='tv' AND amount IN (%s, %s, %s) 
 
AND mark='good' AND color=%s 
 
OR NOT EXISTS 
 
(SELECT product FROM talble WHERE product='tv' 
 
AND amount IN (%s, %s, %s) AND mark = 'good') GROUP BY product \t 
 
",$amount1,$amount2,$amount3,$color,$amount1,$amount2,$amount3)); 
 
/* 
 
product amount  color   mark 
 
tv   4  red   good 
 
tv   5   yellow  bad 
 
tv   4   black   OK 
 
tv   6  black   bad 
 
tv   4  yellow  good 
 
radio  5  yellow  good 
 
radio  6   yellow  good 
 
*/ 
 

 
?>

+1

預期產量是多少? –

+1

我試着編輯你的代碼,不知道你爲什麼有代碼,然後是db schema,然後是'?>'。請重新格式化它。 –

+1

你正在混合'和'和'或'而沒有任何'()'來執行執行順序。 –

回答

0

根據文字說明,我認爲SQL你想會更接近於

select 
    product 
from 
    table 
where 
    amount in (%s, %s, %s) and 
    product='tv' and 
    ((mark='good' and color=%s) or mark!='good') 
group by 
    product 
0

你應該考慮改變您的查詢像下面

SELECT product 
FROM table 
WHERE (product='tv' 
AND amount IN (%s, %s, %s) 
AND mark='good' 
AND color=%s) 
OR NOT EXISTS 
(SELECT 1 FROM talble WHERE product='tv' 
AND amount IN (%s, %s, %s) AND mark = 'good') 
GROUP BY product 
相關問題