我必须通过两个值来获取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的值。
答案 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
的原因
更好的选择是使用IN
或OR
子句几乎都是相似的,但是IN
会避免使用带有参数而不是像{这样的运算符的函数{1}}
OR