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

0

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

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

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

Спасибо

Теги:
select

3 ответа

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' )";
  • 0
    Это хорошо. Спасибо
  • 0
    Это выглядит круто. Благодарю.
Показать ещё 1 комментарий
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' )";
  • 0
    Этот ответ был опубликован до полного решения от принятого ответчика.
0

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

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

  • 0
    да ты прав. Поля являются первичными ключами. Вышеприведенная логика может быть реализована для разных таблиц с разными комбинациями первичных ключей, поэтому я привел два примера данных. Я знаю, что он будет включать в себя часть кода PHP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню