MySQL: как я могу проверить, есть ли пользователи в списке или нет

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

В PHP у меня есть массив с некоторыми идентификаторами пользователей.
то есть userIDs [0] = 1234; userIDs [1] = 2345;

Теперь я хотел построить запрос, чтобы сделать только один вызов SQL, если это возможно, чтобы получить следующий результат:

############################
#    UserID    #   Exists  #
############################
#     1234     #     0     #
#     2345     #     1     #
############################

Есть ли решение SQL или я должен проверить каждый идентификатор с отдельным вызовом?
Спасибо за помощь!

1

Решение

Чтобы проверить существующие idпротив списка, который вы можете сделать

select userId, userId in (2345,5678) as `exists`
from your_table
order by userId

Но чтобы проверить, если список ids в БД вы можете сделать

select tmp.userId, tab.userId is not null as `exists`
from
(
select 1234 as userId
union all
select 2345
union all
select 3456
) tmp
left join db_table tab on tab.userId = tmp.userId
0

Другие решения

Икс:

Вы строите свой запрос в PHP, который является строкой.

$idsFromFacebook = array(1234,2345,3456,4567);

//start query
$strQuery = "select tmp.userId, tab.userId is not null as `exists` from (";
$bfirstRun = true;

//Go through each element of the array and connect them with the query string
foreach( $idsFromFacebook as $userID )
{
//There is no union all before the first element and after the last
if ( !$bFirstRun )
$strQuery .= " union all ";

$strQuery .= "select ".$userID;

if ( $bFirstRun )
{
//"as userId" is only needed the first time
$strQuery .= " as userId";
$bFirstRun = False
}
}

//Finishing the query by joining the generated table with database
$strQuery .=  ") tmp left join db_table tab on tab.userId = tmp.userId;";

//Call Query
$result = $dbms->query($strQuery);
//...

Это в значительной степени это. Поскольку запрос является строкой, вы можете создать его так, как хотите, чтобы он был 🙂

0

По вопросам рекламы [email protected]