PHP - 如何在这两个查询中使用UNION all

时间:2014-04-10 14:35:16

标签: php sql

我想将这些查询合并为一个,使用union all,我该怎么做?

$query = ("SELECT menu_id, menu_friendlyName
        FROM menu
        WHERE back = 1 AND active = 1")


$query = ("SELECT menu_id, submenu_id, submenu_name, url
        FROM submenu
        WHERE active = 1");

2 个答案:

答案 0 :(得分:0)

例如这样:

$query =
  "select * from (
   SELECT
      menu_id,
      menu_friendlyName,
      NULL as submenu_id,
      NULL as url,
   FROM menu
   WHERE back = 1 AND active = 1
    union all 
   SELECT
      menu_id,
      NULL as menu_friendlyName,
      submenu_id,
      submenu_name,
      url,
   FROM submenu
   WHERE active = 1) x"
);

否则正如其他人提到的那样,联盟并不是一个好主意。

答案 1 :(得分:0)

如果要选择具有相应子菜单条目的菜单条目,则必须使用 JOIN 。我会使用 LEFT JOIN

SELECT m.menu_id, m.menu_friendlyName, s.submenu_id, s.submenu_name, s.url
FROM menu AS m
LEFT JOIN submenu AS s
    ON s.menu_id = m.menu_id
WHERE
    m.back = 1
    AND m.active = 1
    AND s.active = 1

如果使用 JOIN ,查询将返回菜单项,其中至少有一个子菜单项。如果您使用 LEFT JOIN ,它还会返回没有任何子菜单条目的菜单条目。