Mysql 在sql中的字段之间订阅

Mysql 在sql中的字段之间订阅,mysql,sql,Mysql,Sql,我有一张有这些字段的表 id,cid,cv 用这些数据 1,5,code 2,3,code4 3,3,cod2 1,4,code5 1,3,code4 ]想要选择id什么cid=5和cv=code,cid=3或4和cv=code 4。 我希望id=1。 我使用了此查询,但结果为0 SELECT id FROM table WHERE (cid='5' and cv='code') and (cid in ('3','4') and cv='code4') 抱歉,英语不好。试试这个(将父母之

我有一张有这些字段的表

id,cid,cv
用这些数据

1,5,code
2,3,code4
3,3,cod2
1,4,code5
1,3,code4
]想要选择id什么cid=5和cv=code,cid=3或4和cv=code 4。 我希望id=1。 我使用了此查询,但结果为0

SELECT id FROM table WHERE (cid='5' and cv='code') and (cid in ('3','4') and cv='code4')
抱歉,英语不好。

试试这个(将父母之间的AND改为OR):

尝试此操作(将parenteses之间的AND更改为或):


您应该尝试使用
ORs
而不是
ANDs

SELECT id 
FROM table 
WHERE (cid='5' and cv='code') 
    OR (cid in ('3','4') and cv='code4')

您应该尝试使用
ORs
而不是
ANDs

SELECT id 
FROM table 
WHERE (cid='5' and cv='code') 
    OR (cid in ('3','4') and cv='code4')
我把这个放在(你可以从最后一个数字是51看出我转错了几圈)。我认为这就是所谓的“关键值”,我建议对这篇文章的标签进行编辑,但我认为你应该重新标记它以包含关键值。无论如何:与一行表示一件事的方法相比,这样的数据库很难查询——相反,一行表示一个属性。因此,如果你想知道什么“东西”具有某些属性,你必须将每件东西的属性粘贴在一行中。运行下面的查询,您将了解我的意思:

SELECT  laptops.laptop, rams.termvalue as ramCount,
  cpus.termvalue as cpusCount, 
  maker.termvalue as company
  FROM  (SELECT DISTINCT laptop FROM my_table) As Laptops

LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'ram') AS rams
            ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'cpu') AS cpus
            ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'company') AS maker
            ON maker.laptop = laptops.laptop
如果您对这种类型的数据库提出了其他问题,您应该始终提到您使用的是“键/值”安排,这是不常见的,不是我们任何人所假设的

在您的fiddler示例中,您希望找到company=dell和cpu=2或ram=2,因此您可以通过将其括在括号中并给它一个别名来查询整个查询,如下所示:

SELECT * FROM  (
SELECT  laptops.laptop, rams.termvalue as ramCount,
  cpus.termvalue as cpusCount, 
  maker.termvalue as company
  FROM  (SELECT DISTINCT laptop FROM my_table) As Laptops

LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'ram') AS rams
            ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'cpu') AS cpus
            ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'company') AS maker
            ON maker.laptop = laptops.laptop
) as laps
WHERE  company = 'dell' AND (cpuscount = 2 OR ramcount = 2)
我把这个放在(你可以从最后一个数字是51看出我转错了几圈)。我认为这就是所谓的“关键值”,我建议对这篇文章的标签进行编辑,但我认为你应该重新标记它以包含关键值。无论如何:与一行表示一件事的方法相比,这样的数据库很难查询——相反,一行表示一个属性。因此,如果你想知道什么“东西”具有某些属性,你必须将每件东西的属性粘贴在一行中。运行下面的查询,您将了解我的意思:

SELECT  laptops.laptop, rams.termvalue as ramCount,
  cpus.termvalue as cpusCount, 
  maker.termvalue as company
  FROM  (SELECT DISTINCT laptop FROM my_table) As Laptops

LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'ram') AS rams
            ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'cpu') AS cpus
            ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'company') AS maker
            ON maker.laptop = laptops.laptop
如果您对这种类型的数据库提出了其他问题,您应该始终提到您使用的是“键/值”安排,这是不常见的,不是我们任何人所假设的

在您的fiddler示例中,您希望找到company=dell和cpu=2或ram=2,因此您可以通过将其括在括号中并给它一个别名来查询整个查询,如下所示:

SELECT * FROM  (
SELECT  laptops.laptop, rams.termvalue as ramCount,
  cpus.termvalue as cpusCount, 
  maker.termvalue as company
  FROM  (SELECT DISTINCT laptop FROM my_table) As Laptops

LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'ram') AS rams
            ON rams.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'cpu') AS cpus
            ON cpus.laptop = laptops.laptop
LEFT JOIN (SELECT laptop, termvalue FROM my_table 
            WHERE term = 'company') AS maker
            ON maker.laptop = laptops.laptop
) as laps
WHERE  company = 'dell' AND (cpuscount = 2 OR ramcount = 2)

在您的示例中,cv必须是='code',并且cv必须等于'code4'-对于任何一条记录,不能同时为这两个值。你不想在结果中出现“1,3,代码4”吗?与和的第二部分相匹配。但没有记录会同时是代码和代码4,对吗?我想要订阅的1,5,代码和1,3,代码4是1。例如,用户向我发布这个数据(5=>code),(3=>code4,4=>code4)以进行搜索。我在表中搜索,并在(3,4)中向用户ID发布cid=5和cv=code和cid和cv=code4。@MJH:但您所描述的应该是结果1和2,而不仅仅是结果1。假设id是产品,cid是属性的类别,cv是属性的值。您希望在类别5中选择属性值为“code”的产品,在类别3或4中选择值为“code4”的产品,并在您的示例中选择公司为“dell”且ram=2或cpu=2的笔记本电脑,cv必须是='code',cv必须等于'code4'-对于任何一条记录,不能两者都是。你不想在结果中出现“1,3,代码4”吗?与和的第二部分相匹配。但没有记录会同时是代码和代码4,对吗?我想要订阅的1,5,代码和1,3,代码4是1。例如,用户向我发布这个数据(5=>code),(3=>code4,4=>code4)以进行搜索。我在表中搜索,并在(3,4)中向用户ID发布cid=5和cv=code和cid和cv=code4。@MJH:但您所描述的应该是结果1和2,而不仅仅是结果1。假设id是产品,cid是属性的类别,cv是属性的值。您希望在类别5中选择属性值为“code”的产品,在类别3或类别4中选择值为“code4”的产品。如果我使用或,result contain id=2。我只想要id=1(对于本例)否,如果我使用OR,result contain id=2。我只想要id=1(对于本例)