Мне было интересно, как я могу проверить, есть ли пользователи уже в базе данных или нет.
В PHP у меня есть массив с некоторыми идентификаторами пользователей.
то есть userIDs [0] = 1234; userIDs [1] = 2345;
Теперь я хотел построить запрос, чтобы сделать только один вызов SQL, если это возможно, чтобы получить следующий результат:
############################
# UserID # Exists #
############################
# 1234 # 0 #
# 2345 # 1 #
############################
Есть ли решение SQL или я должен проверить каждый идентификатор с отдельным вызовом?
Спасибо за помощь!
Чтобы проверить существующие id
против списка, который вы можете сделать
select userId, userId in (2345,5678) as `exists`
from your_table
order by userId
Но чтобы проверить, если список id
s в БД вы можете сделать
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
Икс:
Вы строите свой запрос в 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);
//...
Это в значительной степени это. Поскольку запрос является строкой, вы можете создать его так, как хотите, чтобы он был 🙂