就可以';看来mysql查询不正确

就可以';看来mysql查询不正确,mysql,Mysql,我试图得到我知道存在的结果,但似乎无法得到正确的查询。我正在使用以下工具: SELECT * FROM carpets AS c INNER JOIN carpet_relations AS r ON c.id = r.carpet_id WHERE c.active = '1' AND **((r.relation_type = '5') AND (r.related_id = '1' ))** *AND* ((r.re

我试图得到我知道存在的结果,但似乎无法得到正确的查询。我正在使用以下工具:

SELECT 
    * 
FROM 
    carpets AS c 
    INNER JOIN carpet_relations AS r ON c.id = r.carpet_id 
WHERE 
    c.active = '1' 
    AND **((r.relation_type = '5') 
    AND (r.related_id = '1' ))** 
    *AND* ((r.relation_type = '4') 
    AND (r.related_id = '1')) 
    AND (c.width_feet BETWEEN '0' AND '17') 
    AND (c.width_inches BETWEEN '0' AND '11') 
    AND (c.height_feet BETWEEN '0' AND '29') 
    AND (c.height_inches BETWEEN '0' AND '11') 
ORDER BY 
    c.item_no
正如您所看到的,如果我将and(斜体)更改为an,我将尝试获取在第二个表中有两个匹配字段的结果,或者我获取结果,但这是两者的结果,我需要在and(粗体)之前的集合中的结果

所以它会是这样的:

具有关系类型5和4的列表

请记住,相关id可能会有所不同,因为有三个colums地毯id、相关id、关系类型

谢谢你的帮助

c_类别 列类型空默认注释 id int(11)编号
标题varchar(250)编号
活动整数(11)否
重量积分(11)无
模板id int(11)编号

c_尺寸 列类型空默认注释 id int(11)编号
标题varchar(250)编号
活动整数(11)否
重量积分(11)无
模板id int(11)编号

美欧关系

列类型空默认注释

地毯id int(11)无更改此项:

((r.relationship_type='5')和(r.relationship_id='1'))和((r.relationship_type='4')和(r.relationship_id='1'))

为此:

(r.relationship\u type='5'或r.relationship\u type='4')和(r.relationship\u id='1')
更改此项:

((r.relationship_type='5')和(r.relationship_id='1'))和((r.relationship_type='4')和(r.relationship_id='1'))

为此:

(r.relation\u type='5'或r.relation\u type='4')和(r.related\u id='1')

您希望关系类型同时为5和4

你想在沙拉里放点“或”吗

编辑:

解决你的问题

您希望关系类型同时为5和4

你想在沙拉里放点“或”吗

编辑:


解决您的问题。

为了灵活性:

r.relation_type IN (4, 5)

为了灵活性起见:

r.relation_type IN (4, 5)

现在我想我明白你的问题了——你正在寻找第5类和第4类结果的交叉点

这可以在PHP中完成,就像您提到的那样,通过执行两个查询并将它们相交,或者您可以在MySQL中通过两次连接
rum\u relations
表来完成,如下所示:

SELECT 
    * 
FROM 
    carpets AS c 
    INNER JOIN carpet_relations AS r1 ON c.id = r1.carpet_id 
    INNER JOIN carpet_relations AS r2 ON c.id = r2.carpet_id
WHERE 
    c.active = '1' 
    AND (r1.relation_type = '5')
    AND (r1.related_id = '1' )
    AND (r2.relation_type = '4')
    AND (r2.related_id = '1')
    AND (c.width_feet BETWEEN '0' AND '17') 
    AND (c.width_inches BETWEEN '0' AND '11') 
    AND (c.height_feet BETWEEN '0' AND '29') 
    AND (c.height_inches BETWEEN '0' AND '11') 
ORDER BY 
    c.item_no

现在我想我明白你的问题了——你正在寻找第5类和第4类结果的交叉点

这可以在PHP中完成,就像您提到的那样,通过执行两个查询并将它们相交,或者您可以在MySQL中通过两次连接
rum\u relations
表来完成,如下所示:

SELECT 
    * 
FROM 
    carpets AS c 
    INNER JOIN carpet_relations AS r1 ON c.id = r1.carpet_id 
    INNER JOIN carpet_relations AS r2 ON c.id = r2.carpet_id
WHERE 
    c.active = '1' 
    AND (r1.relation_type = '5')
    AND (r1.related_id = '1' )
    AND (r2.relation_type = '4')
    AND (r2.related_id = '1')
    AND (c.width_feet BETWEEN '0' AND '17') 
    AND (c.width_inches BETWEEN '0' AND '11') 
    AND (c.height_feet BETWEEN '0' AND '29') 
    AND (c.height_inches BETWEEN '0' AND '11') 
ORDER BY 
    c.item_no


你的意思是类型5还是类型4?只是为了确保理解,5表示关系是针对类别的,1表示关系是类别1,然后4表示关系是针对模板的,1表示关系是模板1…………我没有编写或设计数据库,但我有解决这个问题的方法是缩小搜索范围,这样就需要同时选择类别1作为主要搜索,然后缩小到类别2,如果我这样做了,那么它会带来更多的结果,而不是更少的结果,就像应该打印屏幕,数据库模式,或者从phpmyadmin复制数据字典一样。你认为这是不可能的吗?如果不是,我只是想我可以用5对结果进行一次查询,然后放入一个数组,然后再对4进行第二次查询……不是最干净的,我更愿意将它们全部保存在一个查询中。你是说类型5还是4?只是为了确保理解,5将说明关系是针对一个类别的,而与其相关的1则说明它是第1类,然后第4类将说明关系是针对模板的,与之相关的第1类将说明它是模板1…………我没有编写或设计数据库,但我必须处理它。这是缩小搜索范围,因此需要同时缩小搜索范围。他们选择第1类作为主类,然后缩小到第2类,如果我这样做的话或者,它会带来更多的结果,而不是更少的结果,就像它应该打印数据库模式屏幕或从phpmyadmin复制数据字典一样。你认为这是不可能的吗?如果不是的话,我只是在想我可以用5对结果进行一次查询,然后放入一个数组中,然后对4进行第二次查询……这不是最干净的,我更愿意将它全部保存在一个查询中。它需要是(5和1)和(4和1),正如@UgurGumushan指出的,
r.relationship\u type
不能同时是4和5。它需要是(5和1)(4和1)正如@UgurGumushan所指出的,
r.relationship\u type
不能同时为4和5。在表中,5表示类别关系,关系id等于类别id,然后4表示模板关系,关系id是模板id,这就是为什么我需要尝试这一点,然后它会显示168个内容,所以就是这样当用户进行搜索时,比如说长地毯,这是整个类别,然后他们单击,希望将其缩小到东方地毯,我不想要长地毯和东方地毯的完整列表,只是东方地毯也是长地毯,表中的5表示类别关系,关系id等于类别id然后,4代表模板关系,关系id是模板id,这就是为什么我需要bothi尝试,然后它会显示168个东西,所以当用户搜索长地毯时,这是整个类别,然后他们点击,他们想缩小到东方地毯,我不想要完整的列表长地毯和东方地毯都是东方地毯,也是一种长地毯,完美地发挥了作用……非常感谢你,现在我只需要查看一下,了解你在连接和查询时所做的工作。这个复合体也是新的。我通常会做没有连接的简单地毯,但这很好