我有一张这样的表:
id | roll_no | name
---------------------
1 | 111 | Naveed
2 | 222 | Adil
3 | 333 | Ali
如果我有这样的数据:
$fields = array( "id" , "roll_no" )
和$values = array( "1,111", "2,222" );
这意味着我必须编写一个sql查询来从表中获取记录(id!= 1和roll_no!= 111)和(id!= 2和roll_no!= 222)。这意味着将获取第三条记录。
如果我有这样的数据:
$fields = array( "id" )
和$values = array( "2", "3" );
这意味着我必须编写一个sql查询来从表中获取记录(id!= 2)和(id!= 3)。这意味着将获取第一条记录。
问:如何使用php编写一般的单个查询,以使用上述两个数据数组从表中获取数据。
由于
答案 0 :(得分:3)
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' )";
答案 1 :(得分:0)
你可能总是要在PHP中爆炸Array
并将值作为字符串传递给查询(sprintf
),这样你就可以而且应该在PHP中完成所有操作。
引起我注意的一件事是你总是使用ID 。 ID是唯一的还是主要的?如果是这样,只需忘记roll_no,因为只使用ID,您的查询会更快。
答案 2 :(得分:0)
在接受的答案的帮助下完成解决方案。
$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' )";