一般单sql查询

时间:2010-08-31 10:02:19

标签: php mysql select

我有一张这样的表:

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编写一般的单个查询,以使用上述两个数据数组从表中获取数据。

由于

3 个答案:

答案 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' )";