编程语言
首页 > 编程语言> > 帮助PHP选择查询:WHERE x = y AND a = b AND IF(c!= d)可能吗?

帮助PHP选择查询:WHERE x = y AND a = b AND IF(c!= d)可能吗?

作者:互联网

好的,这里我们去…我有一个选择查询访问一个非常抽象的数据库.我当前的查询通过5个表(使用6“AND”来执行它…没有乐趣)并返回符合所有条件的任何记录,因为它应该.

我的问题是:我可以在我当前的查询中添加一些内容,基本上说“如果一条记录与所有这些匹配,但不匹配所有这些”.

例:

我目前的查询:

$query = "SELECT s.state_name FROM `tbl_records` r, `tbl_states` s,
 `tbl_events` e, `tbl_fields` f, `tbl_field_values` v 
WHERE s.state_id = r.state_id AND f.field_id = '$field_id' AND 
v.field_id = f.field_id AND v.event_id = e.event_id AND e.record_id = r.record_id
 AND v.value_id = '$field_value' AND v.is_latest = '1'";

丑陋长,对吧?那么它给了我所有符合一个标准的记录(记录匹配$field_id和$field_value).

现在我需要获取此查询找到的所有记录,但减去满足其他条件的任何记录,例如“AND(v.event_id = e.event_id AND f.field_id =’155’AND v.value_id!=’1′ );

这是漫长而丑陋的版本.总结一下:

我需要创建一个类似于的查询:
    选择“s.state_name FROM a,b,c,d WHERE(a.1 = b.2 AND c.3 = d.4 * etc *)并且仅选择(a.2 = b.3和c.4! = d.5)“

这可能吗?你能创建一个查询说“如果匹配所有这些并且不匹配所有这些”吗?

如果有人需要更多澄清,请告诉我……这不会让我感到惊讶.谢谢你们.

更新::添加图像以尝试澄清我需要的内容.

table structure http://www.everythingsirie.com/values.jpg

“需要添加”下的两个值需要属于同一记录.因此,在计划英语中“对于同一记录,如果记录的’field_id’为’155’且field_value为’1′,则在表’tbl_field_values’中,不要包含它.”

但请注意,现在有两个field_id和value_id.这就是让我难过的……

更新2 ::

我使用@ M42和@Michael的答案更新了查询.但是,无论有没有“AND NOT”,我仍然得到相同数量的回报……

$query = "SELECT s.state_name FROM `tbl_records` r
INNER JOIN `tbl_states` s ON s.state_id = r.state_id
INNER JOIN `tbl_events` e ON e.record_id = r.record_id
INNER JOIN `tbl_field_values` v ON v.event_id = e.event_id
INNER JOIN `tbl_fields` f ON v.field_id = f.field_id
WHERE f.field_id = '$field_id'
AND v.value_id = '$field_value'
AND v.is_latest = '1'
AND NOT (v.field_id = '155' AND v.value_id = '1')";

我认为问题是我需要匹配的field_id和value_id与我需要匹配的field_id和value_id在同一个表中.这是一张pic,显示了field_id为155,其value_id为1和0.

我不需要包含value_id为1的记录,仅当field_id为155时…但同时我尝试选择field_id = 12和value_id = 1的记录…

table structure http://www.everythingsirie.com/valueid.jpg

我知道这是一团糟…抱歉.

解决方法:

据了解,您可以添加到您的查询:

AND NOT (f.field_id = '155' AND v.value_id != '1')

标签:phpquery,php,mysql,select
来源: https://codeday.me/bug/20190903/1797359.html