Массив значений из SQL показывает, какие существуют, а какие нет - PullRequest
2 голосов
/ 10 марта 2020

Я не мог придумать заголовок, я знаю, что это нехорошо.

По сути, я собираюсь выставить мне массив значений. Эти значения будут целыми числами.

Итак, допустим, это будет 1,2,3,4,5 и т.д. c .. Я уже выяснил, как получить их соответствующие значения из базы данных, например такие

  $values = explode(",", $_GET['id']);
  $placeholders = str_repeat('?, ', count($values) - 1) . '?';
  $CheckQuery = $database->prepare("SELECT * FROM users WHERE the_id IN($placeholders)");
  $CheckQuery->execute($values);
  $Res = $CheckQuery->fetchAll(PDO::FETCH_ASSOC);

Теперь это здорово, потому что с учетом идентификаторов я хочу иметь возможность вернуть:

ID1:0or1
ID2:0or1

Я застрял, пытаясь выяснить, как вернуть идентификаторы, которые не существует в базе данных, хотя. Любая помощь здесь?

Ответы [ 2 ]

0 голосов
/ 10 марта 2020
$values = explode(",", $_GET['id']);
$placeholders = str_repeat('?, ', count($values) - 1) . '?';
// select `the_id` as you don't need other fields in select
$CheckQuery = $database->prepare("SELECT the_id FROM users WHERE the_id IN($placeholders)");
$CheckQuery->execute($values);

// Use `FETCH_COLUMN` to fetch ids as array:
$ids = $CheckQuery->fetchAll(PDO::FETCH_COLUMN, 0);
// Now you can use `array_diff` to get ids 
// that are in `$values` and not in `$ids`
print_r(array_diff($values, $ids));
0 голосов
/ 10 марта 2020

Если вы хотите 1 или 0, вы можете использовать результаты массива $values и данные из базы данных $Res, создать массивы с ключами в этих списках (1 для $Res и 0 для $values) затем переписать 0 с 1, найденными в базе данных ...

$present = array_fill_keys(array_column($Res, 'the_id'), 1);
$allValues = array_fill_keys($values, 0);
$result = array_replace($allValues, $present);

с некоторыми тестовыми данными ...

$_GET['id'] = '1,2,3';
$values = explode(",", $_GET['id']);

$Res = [ ['the_id' => 1], ['the_id' => 3]];

$present = array_fill_keys(array_column($Res, 'the_id'), 1);
$allValues = array_fill_keys($values, 0);
$result = array_replace($allValues, $present);

print_r($result);

вы получите

Array
(
    [1] => 1
    [2] => 0
    [3] => 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...