2016-01-02 4 views
0

У меня есть 2 таблицы, содержащие сообщения, а другие содержат пользователей.Looping sql SELECT query

Таблица сообщений содержит две идентификаторы, которые являются идентификаторами «UserOne» и «UserTwo».

Я выбираю другой идентификатор пользователя (не вошедшие один) и получить уникальные Идентификаторы только этого код

$usersEmails = array(); 
    $query = "SELECT `UserOne`, `UserTwo` FROM `messages` WHERE (`UserOne`='$id' OR `UserTwo`='$id')"; 
    if($query_run = mysqli_query($connect, $query)){ 
     $num_rows = mysqli_num_rows($query_run); 
     if($num_rows > 0){ 
      while($get = mysqli_fetch_assoc($query_run)){ 
       $userOne = $get['UserOne']; 
       $userTwo = $get['UserTwo']; 

       if($userOne != $id){ 
        array_push($usersEmails, $userOne); 
       }else if($userTwo != $id){ 
        array_push($usersEmails, $userTwo); 
       } 
      } 
     } 
    } 
    $loopStop = count($usersEmails); 

И вот началась проблема ..

Я хочу, чтобы выбрать тот уникальный пользователь Email используя их идентификаторы, которые я вставленные в этом массиве называется $ usersEmails

Я использовал этот код, чтобы показать уникальные пользователи Email:

for($x = $loopStop - 1; $x >= 0; $x--){ 
$query_two = "SELECT `Email` FROM `signup` WHERE `Id`='$usersEmails[$x]'"; 
$query_two_run = mysqli_query($connect, $query_two); 
$get_two = mysqli_fetch_assoc($query_two_run); 
$email = $get_two['Email']; 
echo "$email";} 

Я знаю, что это нехорошо зацикливать запрос на sql-запрос и его очень дорогие тоже любые идеи?

Спасибо и счастливого нового года

+0

Вы не сделать запрос SQL в цикле. Запрос 'mysqli_query ($ connect, $ query)' запускает запрос. Цикл while просто вытягивает другую строку из объекта. – wogsland

ответ

0

Попробуйте этот запрос

SELECT s.`Email` FROM `messages` m 
inner join `signup` s on s.`Id`= m.`UserOne` 
WHERE m.`UserOne`='$id' 

union 

SELECT s.`Email` FROM `messages` m WHERE 
inner join `signup` s on s.`Id`= m.`UserTwo` 
WHERE m.`UserTwo`='$id' 
+0

Извините, я не понимаю, что такое 's' и 'm' –

+0

Это псевдоним для имени таблицы. Вы можете написать имя таблицы перед именем поля, например '' 'signup'''Mail'''. Но это слишком долго :) – Evgeny

+0

ah okay: D Вы хотите, чтобы я отменил два моих запроса и воспользовался этими двумя запросами, чтобы получить уникальные электронные письма? –