所以我需要帮助将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如果有意义让我知道
答案 0 :(得分:0)
通常,您可以使用UNION
或UNION ALL
(docs 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')”以及两种情况下所需的所有字段列表来解决您的问题。