![](/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.