簡體   English   中英

如何使用相同的鍵字段MySQL從多個行中基於WHERE值選擇行

[英]How to select rows based on WHERE values from multiple rows with the same key-field MySQL

首先,我需要以下選擇:

select post_id, meta_key, meta_value 
from wp_postmeta 
where (meta_key = 'price_range' OR 
       meta_key = 'price_input' OR 
       meta_key = 'price_input_currency')

然后,我得到如下表所示的結果:

在此處輸入圖片說明

然后,我需要根據以下兩個條件過濾掉記錄的內容,方法是查看每組具有相同ID的3行。

基於以下兩個條件,我應該只在紅色框中看到行組。

①首先,僅顯示具有price_range作為meta_key

僅顯示meta_key = 'price_range'作為每個post_id三行之一的行。

②僅顯示meta_key: price_input meta_value為空的meta_value ,但meta_key: price_input不為空的price_range

所以基本上:

meta_key = 'price_input' AND (meta_value = '' OR meta_value = null)

meta_key = 'price_range' AND (meta_value != '' OR meta_value != null)

我不能在具有不同meta_key但具有相同post_id的行之間使用AND,但是使用OR則無法獲得所需的信息。 所以我很困惑該怎么做。

我的問題的原因:

我正在嘗試更新數據,並且不再使用“ price_range”字段。 我將這些信息放入兩個新字段中:“ price_input”和“ price_input_currency”。 這就是為什么我要快速檢查“ price_range”中哪些項目仍然有內容,但新字段中沒有數據的原因。
因此,紅色行的price_range值,而price_input的值則沒有。 這些是我要尋找的。

如果我理解正確,則每個post_id最多需要三個項目,每個項目都可以滿足您的where語句。 如果是這樣,您可以使用GROUP BY by和LIMIT

已編輯

因此,我一直在尋找您的問題,並且找到了很好的參考資料http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-在SQL /

當您在此處導航時,不太好的消息是您的案例中的group by語句可能未固定(與鏈接中的apple / banana / etc類型不同)。

我相信,如果組數不是固定的,那么您將不得不求助於循環:

(這只是網站上的一個示例,在修改此代碼以滿足您的需要之前,我需要睡一會兒)

set @num := 0, @type := '';

select type, variety, price
from (
select type, variety, price,
  @num := if(@type = type, @num + 1, 1) as row_number,
  @type := type as dummy
from fruits
order by type, price
) as x where x.row_number <= 2;

話雖如此,我實際上建議不要在數據庫級別執行此邏輯(除非您只是為了學習而已),因為數據庫已針對獲取和存儲變量進行了優化。 您可能希望在服務器級別實現此邏輯,或者不為此使用RDB。

抱歉最初的帖子錯誤=(

暫無
暫無

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

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