Общий одиночный SQL-запрос - PullRequest
       12

Общий одиночный SQL-запрос

0 голосов
/ 31 августа 2010

У меня есть такая таблица:

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

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 31 августа 2010
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' )";
0 голосов
/ 01 сентября 2010

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

$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' )";
0 голосов
/ 31 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...