簡體   English   中英

Mysql:對多條記錄應用條件

[英]Mysql: applying conditions on multiple records

我有一個 MySQL 表來存儲產品變體選項值(例如:顏色、尺寸、重量、產品變體的高度)。 它包含以下數據。

在此處輸入圖片說明

我在前端有一個過濾器選項,用戶可以在其中選擇過濾器選項,例如顏色、尺寸、重量、高度等,我需要根據過濾器值顯示產品變體。

在上面的例子中:option_id = 110 表示大小。 option_id = 109 表示顏色。 假設用戶選擇的尺碼 = 31 (XL) 和顏色 = 27 (紅色),

我必須找到一個 product_variant_id 其中 option_id = '110' AND option_value_id = 31 AND option_id = '109' AND option_value_id = 27.(結果應該是 ids 266 和 267 的記錄)

只有一個這樣的 product_variant_id 是 140。

我試過

SELECT * FROM product_variant_option_values WHERE (option_id = '110' AND option_value_id = 31) OR (option_id = '109' AND option_value_id = 27)

但它沒有返回我想要的,上面的查詢返回

在此處輸入圖片說明

好的,在看到你現在得到的結果后。 如果我理解正確,您希望product_variant_id恰好具有您提到的兩個條件。 因此,查詢的一種選擇可能是:

SELECT product_variant_id
FROM product_variant_option_values 
WHERE (option_id = '110' AND option_value_id = 31) OR (option_id = '109' AND option_value_id = 27)
GROUP BY product_variant_id
HAVING count(*) = 2

這意味着,您計算每個product_variant_id返回的行數,並且只返回具有 2 行的行數。 這意味着得到了兩個條件。

我認為您可以做的是添加一個COUNT()操作來查看是否滿足兩個過濾條件。 像下面這樣:

SELECT   product_variant_id,COUNT(*) cnt 
FROM     product_variant_option_values 
WHERE    (option_id = '110' AND option_value_id = 31) 
  OR     (option_id = '109' AND option_value_id = 27)
GROUP BY product_variant_id
HAVING   cnt >= 2;

product_variant_id分組,其中COUNT()的結果為 2 或更多; 如果過濾條件始終為 2,那么只需HAVING cnt=2就足夠了。 這個查詢可以類似地寫成這樣:

SELECT   product_variant_id,COUNT(*) cnt 
FROM     product_variant_option_values 
WHERE    option_id in ('110','109') 
  AND    option_value_id IN (27,31)
GROUP BY product_variant_id
HAVING   cnt >= 2;

小提琴示例: https : //www.db-fiddle.com/f/9kKmyHsSAMNk4BBPDWLHFh/3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM