如何使用两个相同的变量和不同的值查找一个ID

时间:2019-02-17 16:44:23

标签: mysql sql group-by

我必须通过两个值来获取ID。 假设当我打电话给我时:id-2我得到两个值7和6。 我想打电话给7和6以获得值2

我有一个表 recipeingredient ,我应该在其中使用 ingredient_id 6 7

找到 recipe_id 2

示例:

iota

返回:6 7

但我想撤消。

我认为应该等同于:

package main

import (
    "encoding/json"
    "fmt"
)

type UserType uint

const (
    UserTypeFree UserType = iota
    UserTypePremium
)

var UserTypeToString = map[UserType]string{
    UserTypeFree:    "Free",
    UserTypePremium: "Premium",
}

var UserTypeFromString = map[string]UserType{
    "Free":    UserTypeFree,
    "Premium": UserTypePremium,
}

func (ut UserType) String() string {
    if s, ok := UserTypeToString[ut]; ok {
        return s
    }
    return "unknown"
}

func (ut UserType) MarshalJSON() ([]byte, error) {
    if s, ok := UserTypeToString[ut]; ok {
        return json.Marshal(s)
    }
    return nil, fmt.Errorf("unknown user type %d", ut)
}

func (ut *UserType) UnmarshalJSON(text []byte) error {
    var s string
    if err := json.Unmarshal(text, &s); err != nil {
        return err
    }
    var v UserType
    var ok bool
    if v, ok = UserTypeFromString[s]; !ok {
        return fmt.Errorf("unknown user type %s", s)
    }
    *ut = v
    return nil
}

func main() {
    var ut UserType

    json.Unmarshal([]byte(`"Free"`), &ut)

    fmt.Printf("%#v %v \n", ut, ut)

    b, _ := json.Marshal(ut)

    fmt.Printf("%v\n", string(b))

}

应返回:2 ,但不返回任何内容

总结一下: 在我的php网页上,我必须选择2个元素并获得1个显示值。 其TAG系统。我不能使用OR,我需要获取具有值A和值B的值。

5 个答案:

答案 0 :(得分:2)

您可以使用聚合和HAVING子句来实现过滤器,例如:

SELECT recipe_id
FROM recipeingredient
GROUP BY recipe_id
HAVING 
    SUM(ingredient_id=6) > 0
    AND SUM(ingredient_id=7) > 0

答案 1 :(得分:1)

如果您正在寻找包含两种成分的食谱

您可以使用IN 然后只吃2种成分

    SELECT id 
    FROM recipeingredient 
    WHERE ingredient_id IN (6 ,7)
    group by id 
    having count(distinct ingredient_id ) = 2 

答案 2 :(得分:1)

您实际上想要这个:

-- all recipes that could be prepared with 6 and/or 7
SELECT recipe_id
FROM recipeingredient
GROUP BY recipe_id
HAVING COUNT(CASE WHEN ingredient_id IN (6, 7) THEN 1 END) = COUNT(*)

或者这个:

-- all recipes that could be prepared with exactly 6 and 7
SELECT recipe_id
FROM recipeingredient
GROUP BY recipe_id
HAVING COUNT(CASE WHEN ingredient_id IN (6, 7) THEN 1 END) = 2
AND COUNT(*) = 2

两个查询都跳过需要6和7以外的成分的配方。

答案 3 :(得分:0)

SELECT * FROM recipeingredient WHERE ingredient_id=6 OR ingredient_id=7

当两个条件都成立时,AND将显示结果。您应该使用OR来检查同一列的两个值。对于同一列,一行不能同时具有两个值。

答案 4 :(得分:0)

如何同时将一个成分设为6和7(除非您的数据是非结构性的或确定的非原子性值),这就是为什么在使用AND子句时您收到的o / p为no rows selected的原因

更好的选择是使用INOR子句几乎都是相似的,但是IN会避免使用带有参数而不是像{这样的运算符的函数{1}}

OR