2015-08-12 4 views
1

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

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

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

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

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

+1

Вы можете использовать предложение 'IN' ...' SELECT ... FROM ... WHERE UserID IN (YourArray) ' – BJones

ответ

0

Для проверки существующих id сек против списка вы можете сделать

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

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

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

Ничего себе, это было легко :) Большое спасибо, я не знал« in »заявление! – SomehowLuke

+0

это даст вам всех пользователей 1000 записей 1000 результатов, если userID 5678 не существует ** он не будет в наборе результатов, а не в списке **. поэтому OP: ** проверить, находятся ли пользователи в базе данных **, не будет работать. –

+0

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

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

Не все пользователи успели протестировать этот запрос. Пожалуйста, покажите в своем ответе. пример Имя базы данных, поля. Созданный '$ strQuery', результат, новая созданная таблица, поля, контент и т. Д. Таким образом, пользователи могут четко видеть, что происходит. Спасибо. –

+0

К сожалению, я тоже не тестировал это, это просто пример создания динамического запроса. Когда у вас есть запрос на создание (это все еще только строка, ничего больше;)), вы можете использовать его точно так же, как жестко закодированный ... – SomehowLuke

Смежные вопросы