![](/img/trans.png)
[英]MySQL select 1 of multiple rows with same field based on where clause
[英]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.