2012-01-19 3 views
0

Нужна ваша помощь с моим массивом PHP/MYSQL.PHP Array в MYSQL выберите

У меня есть PHP скрипт, который выбирает пользователь из строки, как это: [email protected], [email protected], [email protected]

У меня есть база данных MYSQL, где некоторые зарегистрированные пользователи присутствуют их по электронной почте адреса. Сценарий должен проверить, если адрес электронной почты, присутствует в строках, как это:

$splitdata = for example: [email protected], [email protected], [email protected] 

$sql= mysql_query("SELECT * FROM `users` WHERE `email` IN ('".join("','", $splitdata)."')")  or die ('Error: '.mysql_error()); 
Then i get the result with a MYSQL fetch array: 

while($result = mysql_fetch_array($sql)) {  
    $email = $result['email']; 
... 

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

Что мне нужно:

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

Он не обязательно должен быть в одном и том же наборе MYSQL, я могу создать еще одну выборку mysql для всех адресов электронной почты, которые не могут быть найдены в базе данных. Мне нужен код примера или кто-то, кто знает, как это сделать.

В настоящее время пробовал NOT IN, но он дал мне результат каждого пользователя в списке, кроме тех, которые можно было найти. Результатом должны быть адреса электронной почты, которые невозможно найти.

+0

Вашего вопрос неясен. Запрос NOT IN должен дать вам то, что вы хотите. Возможно, вам нужно усовершенствовать свой запрос, чтобы исключить другие критерии, такие как «И адрес электронной почты NOT NULL» – dar7yl

ответ

2

Вы можете сохранить найденные письма в массиве и сделать array_diff() с обоими:

$splitdata = array([email protected], [email protected], [email protected]) 
$sql= mysql_query("SELECT * FROM `users` WHERE `email` IN ('".join("','", $splitdata)."')")  or die ('Error: '.mysql_error()); 
while($result = mysql_fetch_array($sql)) {  
    $emailsFound[] = $result['email']; 
    $email = $result['email']; 
} 

$emailsNotInResults = array_diff($splitdata,$emailsFound); 

Это даст вам множество писем, которые были в вашем $splitdata, но не может быть найден в базе данных.

+0

Спасибо, помощник. Оно работает – user983511

0

Получение ошибки при вызове выборки обычно означает, что ваш запрос не удался, и вы вернули логический FALSE вместо дескриптора оператора.

Try проверки отказа запроса первого:

$sql = mysql_query("...."); 
if ($sql === FALSE) { 
    die(mysql_error()); 
} 

перед выполнением вызова выборки.

0

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

ВЫБОР СЛУЧАЙ, КОГДА СУЩЕСТВУЕТ (SELECT 1 FROM пользователей, где электронная почта = '$ электронной почты') THEN 'да' ELSE 'нет' END