2015-04-04 2 views
0

я работал на почтовой системе ..
Итак, я должен показать сообщения от друзей пользователя и групп, в которых принимал участие пользователь ..
Вот мой код, чтобы показать сообщения ..Как перемешать сообщения в двух таблицах?

<?php 
    $sql = "SELECT * FROM posts WHERE uploader_id=:friend_id ORDER BY id DESC"; 
    $query = $db->prepare($sql); 
    $query->execute(array(
    ":friend_id" => $friend_id 
)); 
    $rows = $query->fetchAll(PDO::FETCH_ASSOC); 
    foreach ($rows as $row) { 
     $name = $row['name']; 
     echo "POST BY $name"; 
    } 
    $sql = "SELECT * FROM group_posts WHERE id=:member_group ORDER BY id DESC"; 
    $query = $db->prepare($sql); 
    $query->execute(array(
    ":member_group" => $group_id 
)); 
    $rows = $query->fetchAll(PDO::FETCH_ASSOC); 
    foreach ($rows as $row) { 
    $name = $row['name']; 
    echo "POST BY $name"; 
    } 
?> 

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

UPDATE

Я отредактировал мой код это ..
я понял, что сначала я должен закодировать это до кодирования моей почтовой системы ..

<?php 
    $sql = "SELECT * FROM friends WHERE user_one=:me OR user_two=:me2 UNION SELECT * FROM group_members WHERE member_id=:me3"; 
    $query = $db->prepare($sql); 
    $query->execute(array(
     ":me" => $my_id, 
     ":me2" => $my_id, 
     ":me3" => $my_id 
)); 
    $rows = $query->fetchAll(PDO::FETCH_ASSOC); 
    foreach ($rows as $row) { 
    $user_one = $row['user_one']; 
    $user_two = $row['user_two']; 
    $group_id = $row['group_id']; 
    if ($user_one == $my_id) { 
     $friend_id = $user_two; 
    } else { 
     $friend_id = $user_one; 
    } 
    echo $friend_id . "<BR>" . $group_id; 
    } 
?> 

Теперь, вот проблема .. Это успешно печатает $ friend_id, но в нем отображается неопределенный индекс 'group_id' при печати $ group_id.
Я проверил все поля правильно.

ответ

0

Попробуйте использовать только один запрос с UNION

SELECT * 
FROM (
    SELECT name, id FROM posts WHERE uploader_id=:friend_id 
    UNION 
    SELECT name, id FROM group_posts WHERE id=:member_group 
) p 
ORDER BY p.id DESC 

Примечания, ваши внутренние запросы должны возвращать число столбцов же в том же порядке (и я думаю, что с тем же именем/псевдонимом, тоже).

+1

Спасибо @Aiias Это было полезно. :) – user3436939

+0

Без проблем @ user3436939. Дайте мне знать, если это не сработает. – Aiias

+0

проверьте обновление пожалуйста. – user3436939

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