Php 一个通用的单sql查询

Php 一个通用的单sql查询,php,mysql,select,Php,Mysql,Select,我有一张这样的桌子: id | roll_no | name --------------------- 1 | 111 | Naveed 2 | 222 | Adil 3 | 333 | Ali 如果我有这样的数据: $fields=array(“id”、“roll\u no”)和$values=array(“1111”、“2222”) 这意味着我必须编写一个sql查询来从表中获取记录,其中(id!=1和roll\u no!=111)和(id!=2和roll\

我有一张这样的桌子:

id | roll_no | name
---------------------
 1 |   111   | Naveed
 2 |   222   | Adil
 3 |   333   | Ali 
如果我有这样的数据:

$fields=array(“id”、“roll\u no”)
$values=array(“1111”、“2222”)

这意味着我必须编写一个sql查询来从表中获取记录,其中(id!=1和roll\u no!=111)和(id!=2和roll\u no!=222)。这意味着将获取第三条记录

如果我有这样的数据:

$fields=array(“id”)
$values=array(“2”、“3”)

这意味着我必须编写一个sql查询来从(id!=2)和(id!=3)的表中获取记录。这意味着将获取第一条记录

Q:如何使用php编写一个通用的单一查询,以使用上述两个数据数组从表中获取数据


谢谢

您可能总是需要在PHP中分解
数组
,并将值作为字符串传递到查询()中,这样您就可以并且应该在PHP中完成所有操作


有一件事吸引了我的眼球,那就是你总是使用ID的。ID是唯一字段还是主字段?如果是这样的话,请忘记roll\u no,因为只使用ID查询会更快。

您可能总是需要在PHP中分解
数组
,并将值作为字符串传递到查询()中,这样您就可以而且应该在PHP中完成所有操作

select * from dummy where concat_ws (',', id, roll_no) not in ('1,111', '2,222')
有一件事吸引了我的眼球,那就是你总是使用ID的。ID是唯一字段还是主字段?如果是这样的话,请忘记roll_no,因为只使用ID查询会更快

select * from dummy where concat_ws (',', id, roll_no) not in ('1,111', '2,222')
完整解决方案:

$tableName = "test"; 
$fields = array( "id" , "roll_no" );
$values = array( "1,111", "2,222" );

$fieldsStr = implode(',', $fields);
$valuesStr = implode("','", $values);
$sql = "SELECT * 
    FROM $tableName 
    WHERE concat_ws(',', $fieldsStr ) NOT IN ( '$valuesStr' )";
完整解决方案:

$tableName = "test"; 
$fields = array( "id" , "roll_no" );
$values = array( "1,111", "2,222" );

$fieldsStr = implode(',', $fields);
$valuesStr = implode("','", $values);
$sql = "SELECT * 
    FROM $tableName 
    WHERE concat_ws(',', $fieldsStr ) NOT IN ( '$valuesStr' )";

在公认答案的帮助下完成解决方案。

$tableName = "test"; 
$fields = array( "id" , "roll_no" );
$values = array( "1,111", "2,222" );

$fieldsStr = implode(',', $fields);
$valuesStr = implode("','", $values);

// Get all records from remote table
$sql = "SELECT * FROM $tableName WHERE concat_ws(',', $fieldsStr ) NOT IN ( '$valuesStr' )";

在公认答案的帮助下完成解决方案。

$tableName = "test"; 
$fields = array( "id" , "roll_no" );
$values = array( "1,111", "2,222" );

$fieldsStr = implode(',', $fields);
$valuesStr = implode("','", $values);

// Get all records from remote table
$sql = "SELECT * FROM $tableName WHERE concat_ws(',', $fieldsStr ) NOT IN ( '$valuesStr' )";

是的,你是对的。字段是主键。上面的逻辑可以针对具有不同主键组合的不同表实现,因此我给出了两个数据示例。我知道它也会包含一部分php代码。字段是主键。上面的逻辑可以针对具有不同主键组合的不同表实现,因此我给出了两个数据示例。我知道它也会包含一部分php代码。此答案是在接受回答者提供完整解决方案之前发布的。此答案是在接受回答者提供完整解决方案之前发布的。请删除
concat\ws
。在服务器上导致此错误:
函数CONCAT\u WS不存在
删除
CONCAT\u WS
之间的空格(
。在服务器上导致此错误:
函数CONCAT\u WS不存在