2014-04-07 98 views
1

我有10个表。表中的1个就是“集线器”。其他用于识别特定的属性。集线器表包含每个ID,而其他表仅包含该表所需的ID。Mysql查询连接表,并选择只有非空行,并具有相同ID

我需要一个连接查询,它可以根据id连接到任何子表中的所有行,并且可以连接集线器表中的所有行。

因此,例如,如果集线器表中的某个行的ID为9,并且其中一个子表的ID为9,则应将它们连接起来。它不应该加入不存在的行,也不能包含空的列。我正在使用Zend-Framework将它们放在一起,但我很乐意接受有关如何在zend-framework或标准php/sql中执行此操作的建议。

这是我现在使用的一个例子,它不工作。此查询获取必要的信息,但也包含空行。除此之外,它会删除子表行中的id,这是我需要的。

$select = $this->db->select() 
    ->from("widgets") 
    ->joinLeft("widget_login", "widgets.id = widget_login.id") 
    ->joinLeft("widget_admin", "widgets.id = widget_admin.id") 
    ->joinLeft("widget_text", "widgets.id = widget_text.id") 
    ->joinLeft("widget_image", "widgets.id = widget_image.id") 
    ->joinLeft("widget_facebook", "widgets.id = widget_facebook.id") 
    ->joinLeft("widget_twitter", "widgets.id = widget_twitter.id") 
    ->joinLeft("widget_google", "widgets.id = widget_google.id"); 

回答

1

我想你应该追加到您的查询:

->where('(not(widgets_login is null)) and (not(widgets_admin is null)) and ... (The same here for all your tables); 
+0

追加一个WHERE语句可能是答案,但我不知道这是它。当我添加结果完全为空时,该语句的语法可能是错误的原因。 – Josh

+0

您是否尝试运行由您自己编写的普通SQL查询(如您试图自动构建的查询)并查看它返回的内容?有时仅仅因为我们正在查询的数据中存在另一个逻辑错误/错误,返回'null'是正确的。 –

相关问题