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不存在