2015-04-04 29 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

Thanks @Aiaias this helpful。 :) – user3436939 2015-04-04 20:46:08

+0

没问题@ user3436939。让我知道如果这不起作用。 – Aiias 2015-04-04 20:48:06

+0

请检查更新。 – user3436939 2015-04-04 21:07:39