Список дубликатов в запросе sql из массива - PullRequest
0 голосов
/ 01 мая 2020

Итак, у меня есть этот запрос, который возвращает 8 строк вместо 10, когда $arr_wordids имеет 10 элементов с дубликатами.

SELECT abc.word, abc.HUN, def.CONTEXT as context, def.WORDID as wordid FROM def JOIN abc ON abc.ID = def.WORDID WHERE WORDID IN ("12212", "8612", "12212", "52355") AND def.USERID=10001235 AND REMOVED=0

Где WORDID IN ("12212", "48612", "12212", "52355") на самом деле WHERE WORDID IN (" . implode(',', array_map('intval', $arr_wordids)) . ") в php.

Поскольку оператор IN удаляет дубликаты, результат этого запроса теперь составляет 3 строки вместо 4.

В качестве демонстрации я добавил только 4 элемента в примере. Какие есть варианты для перечисления всех?

1 Ответ

0 голосов
/ 01 мая 2020

Как указывалось, вы можете опубликовать данные для получения полного массива.

Если вы можете вернуть данные из PDO, используя столбец wordid в качестве индекса, это сохранит один шаг (см. { ссылка } для получения подробной информации о том, как это сделать). Если нет, вы можете использовать $data = array_column($data, null, 'wordid'); для достижения того же результата.

Затем с помощью возвращаемого массива идентификаторов слов и индексированных данных из базы данных вы можете создать полный массив данных, сопоставив два. Примером которого будет ...

$arr_wordids = [ 1,2,3,1];
// Results of SQL query
$data = [1 => 'row 1', 2 => 'row 2', 3 => 'row 3'];
$arr_data = [];
foreach ( $arr_wordids as $wordid ) {
    if (isset($data[$wordid])) {
        $arr_data[] = $data[$wordid];
    }
}

print_r($arr_data);

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

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