Mysql查询连接表并仅选择非空且具有相等ID的行

时间:2014-04-07 21:38:23

标签: php mysql sql zend-framework

我有10张桌子。其中一个表是“集线器”。其他用于标识特定属性。中心表包含每个id,而其他表只携带该表所需的ID。

我需要一个连接查询,它可以根据id连接中心表中的所有行以及任何子表中的所有行。

因此,例如,如果集线器表中的一行具有id为9且其中一个子表的id为9,则应该将它们连接起来。它不应该连接不存在的行,也不能包含null的列。

我正在使用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 个答案:

答案 0 :(得分:1)

我认为您应该附加到您的查询中:

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