繁体   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