2012-08-08 69 views
1

当单独运行以下每个SELECT(没有UNION)时我正在按预期得到结果。使用UNION时我不会得到任何结果。

任何想法,为什么这不起作用?

$query = " 
(SELECT * FROM projects WHERE public='1') 
UNION 
(SELECT * FROM projects JOIN project_region ON projects.id_project = project_region.id_project 
JOIN user ON user.id_region = project_region.id_region WHERE user.user_id = {$current_user->ID}) 
UNION 
(SELECT * FROM projects JOIN project_user ON projects.id_project = project_user.id_project 
WHERE project_user.user_id = {$current_user->ID}) 
"; 

$projects = $wpdb->get_results($query); 

if ($projects) { 
    foreach ($projects as $project) { 
     // output results 
    } 
} 

回答

1

UNION您需要为每个联合查询具有相同的列号,列名称。因此,在第一个查询中,您有来自项目表的列,但在第二个查询中,您有来自项目,项目地区和用户表的列。

+0

THX为你的答复,但问题是一个MySQL错误“列'id_project'字段列表中是不明确的”。请参阅下面的答案。 – joko13 2012-08-08 10:27:52

+0

xto的答案是正确的答案。 joko13你的回答是xto的解释的结果... – Nico 2014-02-07 14:56:43

0

MySQL的错误是在字段列表*列 'id_project' 不明确*

所以工作查询看起来是这样的:

$query = " 
(SELECT id_project, name FROM projects WHERE public='1') 
UNION 
(SELECT projects.id_project, projects.name FROM projects JOIN project_region ON projects.id_project = project_region.id_project 
JOIN user ON user.id_region = project_region.id_region WHERE user.user_id = {$current_user->ID}) 
UNION 
(SELECT projects.id_project, projects.name FROM projects JOIN project_user ON projects.id_project = project_user.id_project 
WHERE project_user.user_id = {$current_user->ID}) 
"; 

,我发现这里的解决方案: http://sqlzoo.net/howto/source/z.dir/err918/mysql