如何从2个不同的表中获取数据?

问题描述:

我有2个表User_Posts如何从2个不同的表中获取数据?

CREATE TABLE IF NOT EXISTS `User_Posts` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(12) NOT NULL, 
    `wall_id` int(12) NOT NULL, 
    `text` text COLLATE utf8_bin NOT NULL, 
    `img` varchar(255) COLLATE utf8_bin NOT NULL, 
    `time` date NOT NULL 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=7 ; 

User_Activity

CREATE TABLE IF NOT EXISTS `User_Activity` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `content` varchar(55) COLLATE utf8_bin NOT NULL, 
    `activity_id` int(12) NOT NULL, 
    `activity` varchar(88) COLLATE utf8_bin NOT NULL, 
    `user_id` int(12) NOT NULL, 
    `time` date NOT NULL, 
    `value` varchar(12) COLLATE utf8_bin NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=131 ; 

,我想获得的所有活动和岗位,其中USER_ID =?

试图与

$act = $this->app->db->rawQuery("SELECT p.*, a.* 
           FROM User_Posts p 
           JOIN User_Activity a 
           ON a.user_id = ? OR p.user_id = ?", array($id,$id)); 

做我得到的数据是这样

Array 
(
    [0] => Array 
     (
      [id] => 130 
      [user_id] => 16 
      [wall_id] => 0 
      [text] => 'Text' 
      [img] => 0 
      [time] => 2014-10-31 
      [deleted] => 0 
      [content] => movie 
      [activity_id] => 5 
      [activity] => favorite 
      [value] => 0 
     ) 

    [1] => Array 
     (
      [id] => 130 
      [user_id] => 16 
      [wall_id] => 0 
      [text] => 'Text' 
      [img] => /posts/ceee9b387dcf72bcb19d1c1c73147ef3.jpg 
      [time] => 2014-10-31 
      [deleted] => 0 
      [content] => movie 
      [activity_id] => 5 
      [activity] => favorite 
      [value] => 0 
     ) 

) 

但我需要

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [user_id] => 16 
      [wall_id] => 0 
      [text] => 'Text' 
      [img] => 0 
      [time] => 2014-10-31 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [user_id] => 16 
      [wall_id] => 0 
      [text] => 'Text' 
      [img] => /posts/ceee9b387dcf72bcb19d1c1c73147ef3.jpg 
      [time] => 2014-10-31 
     ) 

     [2] => Array 
     (
      [id] => 130 
      [content] => movie 
      [activity_id] => 5 
      [activity] => favorite 
      [value] => 0 
     ) 

) 

响应与附加活动的职位,但我需要不同每个人的结果

该怎么办?

+0

你试图做的事情是不可能的。查询返回的所有行必须具有相同的列。 – nvanesch 2014-10-31 14:26:10

只是一个小改

$act = $this->app->db->rawQuery("SELECT p.*, a.* 
          FROM User_Posts p, User_Activity a 
          WHERE a.user_id = p.user_id 
          AND p.user_id = ?", array($id)); 
+0

我从User_Posts获得了与User_Activity中的附加行相同的结果行 – 2014-10-31 14:19:04

你不需要JOIN关键字。

SELECT * 
FROM User_Posts, User_Activity 
WHERE `User_Activity`.`User_id` = `User_Posts`.`user_id` 
+0

这是一个连接,只有另一种语法。 – nvanesch 2014-10-31 14:24:52

+0

得到相同的,改变了问题,并再次查看我得到 – 2014-10-31 14:26:10

+0

@ nvanesch,是它加入两个表,但它不使用'JOIN'。纠正我的语法不利于回答这个问题。如果您觉得您可以更清楚地回答问题,请对其进行编辑。 – 2014-10-31 14:30:16