如何将2个mysql查询组合成1个不同的where子句

时间:2014-07-23 06:37:40

标签: php mysql

所以我需要帮助将2个mysql查询组合成1个查询。 这样我就可以使用php将查询插入到foreach循环中,但是我被卡住了,因为我还不知道该怎么做!请帮忙。

我希望它能够返回我选择的所有列。

QUERY 1:

SELECT b.id, b.post_text, c.default_photo, d.first_name, e.status 
FROM posts b 
INNER JOIN profiles c 
INNER JOIN users d 
INNER JOIN friendship e 
ON b.from_user = c.user_id 
AND b.from_user = d.id 
AND e.friend_id = b.from_user 
WHERE e.status = 'Friend' 
AND e.user_id = :id
ORDER BY b.id DESC

QUERY 2:

SELECT b.id, b.by_who_id, b.photo_dir, c.default_photo, d.first_name, e.status
FROM photos b 
INNER JOIN profiles c 
INNER JOIN users d 
INNER JOIN follower e 
ON b.by_who_id = c.user_id 
AND b.by_who_id = d.id 
AND e.from_user = b.from_user 
WHERE e.status = 'Following' 
AND e.following_who_id = :id
ORDER BY b.id DESC

这两个查询都有效,但我需要帮助将它们组合起来。

更新

确定所以查询1现在完美无缺,我想要查询1和2的原因是因为如果用户正在关注"那么"它会获取数据。但如果他不遵循那个"那么"然后它现在没有返回任何东西,我希望所有的列一起返回。

idk如果有意义让我知道

2 个答案:

答案 0 :(得分:0)

通常,您可以使用UNIONUNION ALLdocs here),只要所有查询都返回相同的列:

SELECT
    foo
FROM
    bar
WHERE
    bar.dateCreated > '2012-01-01'

UNION ALL

SELECT
    foo
FROM
    baz
WHERE
    baz.status IN (2,3);

您的查询问题是每个查询都返回了不同的列集。因此,您可以使用PHP解决此问题:

$res1 = array(/*results from query 1*/);
$res2 = array(/*results from query 2*/);

$res = array_merge($res1, $res2);

foreach($res as $r){
    if(array_key_exists('post_text', $r){
       //result came from first resultset, process it here
    } elseif(array_key_exists('by_who_id', $r) {
       //result came from second resultset, process it here
    } else {
       //cannot resolve from which resultset this particular result came, throw exception
       throw new Exception('Cannot handle results - unrecognized result');
    }

}

答案 1 :(得分:0)

正如我所看到的,您使用不同的状态过滤器和额外的列名称具有相同的查询。只需使用语句“WHERE e.status IN('status1','status2')”以及两种情况下所需的所有字段列表来解决您的问题。