У меня есть таблица вроде этого:
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' )";