Общий запрос на один sql

У меня есть таблица вроде этого:

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). Это означает, что будет извлечена 3-я запись.

Если у меня есть такие данные:

$fields = array( "id" ) и $values = array( "2", "3" );

Это означает, что я должен написать sql-запрос, чтобы получить записи из таблицы, где (id! = 2) и (id! = 3). Это означает, что будет извлечена первая запись.

В: Как написать общий одиночный запрос с использованием php для получения данных из таблицы, используя выше двух массивов данных.

благодаря

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

Вам, вероятно, всегда придется взорвать Array в PHP и передать значения в виде строки в запрос ( sprintf ), чтобы вы, вероятно, могли и должны делать все на PHP.

Единственное, что бросается в глаза, это то, что вы всегда используете идентификаторы . Являются ли идентификаторы уникальными или первичными? Если так, просто забудьте о roll_no, так как ваш запрос будет быстрее, используя только идентификаторы.

Полное решение с помощью принятого ответа.

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