如何根据具有相同键字段MySQL

时间:2016-03-25 07:16:09

标签: 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')

然后我得到如下表的结果:

enter image description here

然后我需要根据以下两个条件筛选出记录,方法是查看具有相同ID的每组3行。

根据以下两个条件,我只能看到红色框中的行组。

①首先,仅显示price_rangemeta_key的群组。

仅显示meta_key = 'price_range'作为每行post_id三行之一的行。

②仅显示meta_key为空meta_value的组:price_input但不包含meta_key的空{:1}}。

基本上是这样的:

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的行之间使用AND,但使用OR我无法获得所需内容。所以我很困惑我应该怎么做。

我的问题的原因:

我正在尝试续订我的数据,以及字段' price_range'不再使用了。我会将这些信息放在两个新字段中:' price_input'和' price_input_currency'。这就是为什么我想要快速检查哪些商品仍然有价值' price_range'但是新领域还没有数据 因此,红色行具有price_range的值,但没有price_input的值。那些是我正在寻找的。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望每个post_id最多包含三个项目,每个项目都能满足您的where语句。 如果是这样,您可以使用GROUP BY和LIMIT

<强>被修改

所以我一直在寻找你的问题,我找到了一个很好的参考 http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

当您在此处导航时,不太好的消息是您的案例中的group by语句可能无法修复(与链接中的类型apple / banana / etc不同)。

我相信如果组的数量没有修复,那么你将不得不求助于循环:

(这只是网站上的一个例子,在我根据您的需要修改此代码之前,我需要稍微睡一觉)

/// resize image to fit in show area without changing image ratio
+ (CGSize)resizeImageViewFromImageSize:(CGSize)imageSize toFitShowSize:(CGSize)showSize {
CGFloat ratioW = imageSize.width / showSize.width;
CGFloat ratioH = imageSize.height / showSize.height;

CGFloat ratio = imageSize.width / imageSize.height;

if (ratioW > 1 && ratioH > 1) { 

    if (ratioW > ratioH) { 
        imageSize.width = showSize.width;
        imageSize.height = imageSize.width / ratio;
    } else {
        imageSize.height = showSize.height;
        imageSize.width = imageSize.height * ratio;
    }

} else if (ratioW > 1) {

    imageSize.width = showSize.width;
    imageSize.height = imageSize.width / ratio;

} else if (ratioH > 1) {

    imageSize.height = showSize.height;
    imageSize.width = imageSize.height * ratio;

} else {

    if (ratioW > ratioH) { 

        if (showSize.width / imageSize.width <= 2) {   
            imageSize.width = showSize.width;
            imageSize.height = imageSize.width / ratio;
        }

    } else {

        if (showSize.height / imageSize.height <= 2) {
            imageSize.height = showSize.height;
            imageSize.width = imageSize.height * ratio;
        }

    }

}

return imageSize;
}

话虽如此,我实际上建议不要在数据库级别上执行此逻辑(除非您只是这样做才能学习),因为数据库已经过优化以获取和存储变量。您可能希望在服务器级别实现此逻辑,或者不使用RDB。

抱歉最初错误的帖子=(