我有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");
答案 0 :(得分:1)
我认为您应该附加到您的查询中:
->where('(not(widgets_login is null)) and (not(widgets_admin is null)) and ... (The same here for all your tables);